我需要在文本文件的开头写一些东西。我有一个包含内容的文本文件,我想在此内容之前写一些内容。说我有;
下午好,先生,你今天过得怎么样? 我很好,你好吗? 谢谢你的提问,我很棒
修改后,我希望它是这样的:
第1页 - 场景59
25.05.2011下午好,先生,你今天过得怎么样? 我很好,你好吗? 谢谢你的提问,我很棒
刚刚编写了内容:)我怎样才能像这样修改文本文件?
答案 0 :(得分:21)
你不能真正修改它 - 文件系统通常不允许你在任意位置插入数据 - 但你可以:
答案 1 :(得分:6)
以防万一对某人有用,这里有完整的源代码方法,可以使用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);
}
答案 2 :(得分:2)
我认为你想要的是随机访问。查看related java tutorial。但是,我不相信你只能在文件中的任意一点插入数据;如果我没记错的话,你只会覆盖数据。如果你想插入,你必须有你的代码
答案 3 :(得分:2)
正如@atk建议的那样,java.nio.channels.SeekableByteChannel
是一个很好的界面。但它只能从1.7开始。
更新:如果使用FileUtils没有问题,请使用
String fileString = FileUtils.readFileToString(file);
答案 4 :(得分:0)
这不是问题的直接答案,但通常是通过InputStreams访问文件。如果这是您的用例,那么您可以通过SequenceInputStream
链接输入流以获得相同的结果。 E.g。
InputStream inputStream = new SequenceInputStream(new ByteArrayInputStream("my line\n".getBytes()), new FileInputStream(new File("myfile.txt")));