使用java来修改文件内容

我需要就地修改文件的特定内容。
我不想创建一个新文件并重写旧文件。 文件也很小,每个最大只有几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 

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

其次,你说:

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

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

你还在评论中说:

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

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

但是,如果要更新源控制系统存储库中的文件则可能会永久性地损坏系统。

假设您希望能够将文件内容作为文本进行操作,并假设文件适合内存(您认为这是一个有效的假设),那么您可能会发现Commons IO FileUtils的方法很有用:

http://commons.apache.org/io/apidocs/org/apache/commons/io/FileUtils.html

例如:

 File f = new File("my-file.txt"); List lines = FileUtils.readLines(f, "UTF-8"); List outLines = modify(lines); // Do some line-by-line text processing FileUtils.writeLines(f, "UTF-8", outLines); 

因此,您将文件内容读入内存,在内存中进行修改,然后使用内存中的新内容覆盖原始文件。 这符合您的“就地”标准吗?

Java支持随机文件访问,特别是使用seek()

看看: http : //docs.oracle.com/javase/tutorial/essential/io/rafs.html