使用java就地修改文件内容

Cra*_*lus 4 java file-io nio inputstream

我需要就地修改文件的特定内容。
我不希望创建一个新的文件,并改写历史。此外,文件很小,每个最大只有几 MB。
对于那些想知道的人(虽然我不确定这是否与 OP 相关),我需要修改属于版本控制的文件,并且需要修改只读版本。就地进行修改要简单得多。
Java apis 可以做到这一点吗?
如果没有,是否有提供此功能的图书馆?

Jim*_*son 5

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<newData.; i++) 
{ 
    file[pos+i] = newData[i];
}
Run Code Online (Sandbox Code Playgroud)

到插入在一个文件中的数据将需要相同的处理将数据插入到一个数组。插入点之后的所有数据都必须向右移动以容纳插入的数据。如果您用较短的字符串替换(即删除字节),则编辑后的数据必须左移。

其次,你声明:

我需要修改属于版本控制的文件并且需要修改只读版本

只读就是这个意思。如果文件是只读的,则无论是否使用随机访问,都不能以任何方式对其进行修改。

你还在评论中说:

新文件将不受源代码控制。我将不得不找到一种方法来添加它。我试图避免这种情况

如果文件受源代码控制,则您很可能正在处理本地副本。只要更新后的文件与原始文件同名并且在同一目录中,如果您创建该文件的新实例,应该没有区别。您只需要将更新的版本提交到源代码控制系统。

但是,如果您正在更新源控制系统存储库中的文件,那么您很可能会永久损坏系统。