写在Java文本文件的开头
我需要在文本文件的开头写入一些东西。 我有一个文本文件的内容,我想在这个内容之前写东西。 说我有;
下午好,先生,今天好吗?
我很好你怎么样?
谢谢你的问候,我很好
修改后,我想它是这样的:
第1页 – 场景59
2011年5月25日下午好,先生,今天好吗?
我很好你怎么样?
谢谢你的问候,我很好
只是做了内容:)我如何修改这样的文本文件?
你不能这样修改它 – 文件系统通常不允许你在任意位置插入数据 – 但你可以:
- 创build一个新文件
- 写前缀给它
- 将旧文件中的数据复制到新文件
- 将旧文件移到备份位置
- 将新文件移到旧文件的位置
- 可以select删除旧的备份文件
我想你想要的是随机存取。 看看相关的java教程 。 但是,我不相信你只能在文件中的任意一点插入数据; 如果我记得正确的话,你只会覆盖数据。 如果你想插入,你必须有你的代码
- 复制一个块,
- 用新东西覆盖,
- 复制下一个块,
- 用先前复制的块覆盖,
- 回到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")));