我需要就地修改文件的特定内容.
我不想创建一个新文件并重写旧文件.文件也很小,每个最大只有几MB.
对于那些想知道的人(虽然我不确定这是否与OP有关),我需要修改属于版本控制的文件并需要修改只读版本.在适当的位置进行修改要简单得多.
Java apis可以实现吗?
如果没有,是否有提供此功能的库?
解决方法:
Java允许随机访问和写入磁盘上的文件.但是,写入文件中间只能覆盖字节 – 即用其他字节替换特定字节 – 并且不能将数据插入文件的中间.为此,您必须在插入点之后重写所有内容.将文件视为恰好驻留在磁盘上的字符数组(char []).随机访问允许你做相同的
char[] file = ... // the file on disk
char[] newData = ... // the data to be written
int pos = ... // the position in the file to write to
for (i=0; i
{
file[pos+i] = newData[i];
}
要在文件中插入数据,需要使用与将数据插入数组相同的过程.插入点之后的所有数据都必须向右移动以容纳插入的数据.如果要用较短的字符串替换(即删除字节),则编辑后的数据必须向左移位.
其次,你说:
I need to modify files that are part of version control and need to modify a read-only version
只读就是这个意思.如果文件是只读的,则无论是否使用随机访问,都无法以任何方式对其进行修改.
你还在评论中说:
The new file will not be under source control.I will have to find a way to add it.I am trying to avoid this
如果文件受源代码管理,则您很可能正在使用本地副本.只要更新的文件与原始文件具有相同的名称并且位于同一目录中,如果您创建该文件的新实例,它就没有任何区别.您只需将更新的版本提交给源控制系统.
但是,如果要更新源控制系统存储库中的文件,则可能会永久损坏系统.