在文本文件Java的开头写

时间:2011-05-25 16:21:33

标签: java file text

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

  

下午好,先生,你今天过得怎么样?   我很好,你好吗?   谢谢你的提问,我很棒

修改后,我希望它是这样的:

  

第1页 - 场景59
  25.05.2011

     

下午好,先生,你今天过得怎么样?   我很好,你好吗?   谢谢你的提问,我很棒

刚刚编写了内容:)我怎样才能像这样修改文本文件?

5 个答案:

答案 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。但是,我不相信你只能在文件中的任意一点插入数据;如果我没记错的话,你只会覆盖数据。如果你想插入,你必须有你的代码

  1. 复制一块,
  2. 用你的新东西覆盖,
  3. 复制下一个块,
  4. 使用先前复制的块覆盖
  5. 返回3直到没有阻止

答案 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")));