写在Java文本文件的开头

我需要在文本文件的开头写入一些东西。 我有一个文本文件的内容,我想在这个内容之前写东西。 说我有;

下午好,先生,今天好吗?
我很好你怎么样?
谢谢你的问候,我很好

修改后,我想它是这样的:

第1页 – 场景59
2011年5月25日

下午好,先生,今天好吗?
我很好你怎么样?
谢谢你的问候,我很好

只是做了内容:)我如何修改这样的文本文件?

你不能这样修改它 – 文件系统通常不允许你在任意位置插入数据 – 但你可以:

  • 创build一个新文件
  • 写前缀给它
  • 将旧文件中的数据复制到新文件
  • 将旧文件移到备份位置
  • 将新文件移到旧文件的位置
  • 可以select删除旧的备份文件

我想你想要的是随机存取。 看看相关的java教程 。 但是,我不相信你只能在文件中的任意一点插入数据; 如果我记得正确的话,你只会覆盖数据。 如果你想插入,你必须有你的代码

  1. 复制一个块,
  2. 用新东西覆盖,
  3. 复制下一个块,
  4. 用先前复制的块覆盖,
  5. 回到3,直到没有更多的块

正如@atk所build议的, java.nio.channels.SeekableByteChannel是一个很好的接口。 但它只能从1.7开始。

更新:如果您使用FileUtils没有问题,然后使用

 String fileString = FileUtils.readFileToString(file); 

以防万一它对某人有用,这里是使用Apache Commons IO库在文件中添加行的完整源代码。 代码不会将整个文件读入内存,因此可以处理任何大小的文件。

 public static void prependPrefix(File input, String prefix) throws IOException { LineIterator li = FileUtils.lineIterator(input); File tempFile = File.createTempFile("prependPrefix", ".tmp"); BufferedWriter w = new BufferedWriter(new FileWriter(tempFile)); try { w.write(prefix); while (li.hasNext()) { w.write(li.next()); w.write("\n"); } } finally { IOUtils.closeQuietly(w); LineIterator.closeQuietly(li); } FileUtils.deleteQuietly(input); FileUtils.moveFile(tempFile, input); } 

这不是问题的直接答案,但通常通过InputStream访问文件。 如果这是你的用例,那么你可以通过SequenceInputStream链接inputstream来获得相同的结果。 例如

 InputStream inputStream = new SequenceInputStream(new ByteArrayInputStream("my line\n".getBytes()), new FileInputStream(new File("myfile.txt")));