一尘不染

通过Java将文本插入现有文件

java

我想创建一个用于编辑文本文件的简单程序(用Java),尤其是一个可以在文本文件中的任意位置插入任意文本的程序。此功能是我当前正在编写的一个较大程序的一部分。

阅读有关java.util.RandomAccessFile的描述,似乎在文件中间执行的任何写操作实际上都将覆盖现有内容。这是我要避免的副作用(如果可能)。

有没有简单的方法可以做到这一点?

提前致谢。


阅读 316

收藏
2020-03-22

共1个答案

一尘不染

好的,这个问题已经很老了,但是FileChannels自Java 1.4起就存在了,我不知道为什么在替换或插入文件内容的问题上没有提到它们。FileChannel很快,请使用它们。

这是一个示例(忽略异常和其他内容):

public void insert(String filename, long offset, byte[] content) {
  RandomAccessFile r = new RandomAccessFile(new File(filename), "rw");
  RandomAccessFile rtemp = new RandomAccessFile(new File(filename + "~"), "rw");
  long fileSize = r.length();
  FileChannel sourceChannel = r.getChannel();
  FileChannel targetChannel = rtemp.getChannel();
  sourceChannel.transferTo(offset, (fileSize - offset), targetChannel);
  sourceChannel.truncate(offset);
  r.seek(offset);
  r.write(content);
  long newOffset = r.getFilePointer();
  targetChannel.position(0L);
  sourceChannel.transferFrom(targetChannel, newOffset, (fileSize - offset));
  sourceChannel.close();
  targetChannel.close();
}
2020-03-22