将 Java StringBuilder 转储到文件

新手上路,请多包涵

将 StringBuilder 转储到文本文件的最有效/优雅的方法是什么?

你可以做:

 outputStream.write(stringBuilder.toString().getBytes());

但这对于一个很长的文件有效吗?

有没有更好的办法?

原文由 Patrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

正如其他人所指出的,使用 Writer,并使用 BufferedWriter,但不要调用 writer.write(stringBuilder.toString()); 而只是 writer.append(stringBuilder);

编辑:但是,我看到您接受了一个不同的答案,因为它是单行的。但该解决方案有两个问题:

  1. 它不接受 java.nio.Charset 。坏的。您应该始终明确指定一个字符集。

  2. 它仍然让你遭受 stringBuilder.toString() 。如果您真正追求的是简单性,请尝试使用 Guava 项目中的以下方法:

Files.write(stringBuilder,文件,Charsets.UTF_8)

原文由 Kevin Bourrillion 发布,翻译遵循 CC BY-SA 3.0 许可协议

您应该使用 BufferedWriter 来优化写入(始终使用 Writer 而不是 OutputStream 写入字符数据)。如果您不写入字符数据,则可以使用 BufferedOutputStream。

 File file = new File("path/to/file.txt");
BufferedWriter writer = null;
try {
    writer = new BufferedWriter(new FileWriter(file));
    writer.append(stringBuilder);
} finally {
    if (writer != null) writer.close();
}

或者,使用 try-with-resources(Java 7 及更高版本)

 File file = new File("path/to/file.txt");
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
    writer.append(stringBuilder);
}

由于您最终要写入文件,因此更好的方法是更频繁地写入 BufferedWriter 而不是在内存中创建一个巨大的 StringBuilder 并在最后写入所有内容(取决于您的用例,您甚至可以完全消除 StringBuilder)。在处理过程中增量写入将节省内存并更好地利用您有限的 I/O 带宽,除非另一个线程试图在您写入的同时从磁盘读取大量数据。

原文由 rob 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题