在Java文本文件的开头进行编写



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

下午好,先生,你今天怎么样
我很好,你好吗
谢谢你的提问,我是伟大的

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

第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);
}

我认为您想要的是随机访问。查看相关的java教程。但是,我不相信您可以在文件中的任意点插入数据;如果我没有记错的话,你只会覆盖数据。如果你想插入,你必须有你的代码

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

正如@atk所建议的,java.nio.channels.SeekableByteChannel是一个很好的接口。但它仅从1.7起提供。

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

String fileString = FileUtils.readFileToString(file);

这不是这个问题的直接答案,但文件通常是通过InputStreams访问的。如果这是您的用例,那么您可以通过SequenceInputStream链接输入流以获得相同的结果。例如

InputStream inputStream = new SequenceInputStream(new ByteArrayInputStream("my linen".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);
    }

相关内容

  • 没有找到相关文章

最新更新