我需要在文本文件开头写入一些内容。我有一个包含内容的文本文件,并且想要在这个内容之前写入一些东西。比如我有:
下午好先生,您今天过得怎么样?
我很好,你呢?
谢谢关心,我很棒
修改后,我希望它变成这样:
第1页-场景59
2011年5月25日下午好先生,您今天过得怎么样?
我很好,你呢?
谢谢关心,我很棒
只是编造的内容 :) 如何将文本文件修改为这种方式?
我需要在文本文件开头写入一些内容。我有一个包含内容的文本文件,并且想要在这个内容之前写入一些东西。比如我有:
下午好先生,您今天过得怎么样?
我很好,你呢?
谢谢关心,我很棒
修改后,我希望它变成这样:
第1页-场景59
2011年5月25日下午好先生,您今天过得怎么样?
我很好,你呢?
谢谢关心,我很棒
只是编造的内容 :) 如何将文本文件修改为这种方式?
你不能以这种方式真正进行修改 - 文件系统通常不允许您在任意位置插入数据 - 但您可以做以下操作:
如果有人需要,这里是使用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);
}
正如@atk所建议的,java.nio.channels.SeekableByteChannel
是一个很好的接口。但它只在1.7及以上版本中可用。
更新:如果您不介意使用FileUtils,则可以使用。
String fileString = FileUtils.readFileToString(file);
这不是对问题的直接回答,但通常文件是通过InputStreams访问的。如果这是您的用例,则可以通过{{link1:SequenceInputStream
}}链接输入流以实现相同的结果。例如:
InputStream inputStream = new SequenceInputStream(new ByteArrayInputStream("my line\n".getBytes()), new FileInputStream(new File("myfile.txt")));
我会把它留在这里,以防有人需要
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try (FileInputStream fileInputStream1 = new FileInputStream(fileName1);
FileInputStream fileInputStream2 = new FileInputStream(fileName2)) {
while (fileInputStream2.available() > 0) {
byteArrayOutputStream.write(fileInputStream2.read());
}
while (fileInputStream1.available() > 0) {
byteArrayOutputStream.write(fileInputStream1.read());
}
}
try (FileOutputStream fileOutputStream = new FileOutputStream(fileName1)) {
byteArrayOutputStream.writeTo(fileOutputStream);
}