将 Java StringBuilder 转储到文件
2022-09-01 01:16:05
将StringBuilder转储到文本文件的最有效/最优雅的方法是什么?
您可以执行以下操作:
outputStream.write(stringBuilder.toString().getBytes());
但是,对于很长的文件,这是否有效?
有没有更好的方法?
将StringBuilder转储到文本文件的最有效/最优雅的方法是什么?
您可以执行以下操作:
outputStream.write(stringBuilder.toString().getBytes());
但是,对于很长的文件,这是否有效?
有没有更好的方法?
正如其他人所指出的,使用Writer,并使用BufferedWriter,但不要只调用。writer.write(stringBuilder.toString());
writer.append(stringBuilder);
编辑:但是,我看到你接受了一个不同的答案,因为它是一句话。但该解决方案存在两个问题:
它不接受 .坏。应始终显式指定字符集。java.nio.Charset
它仍然让你遭受.如果简单性真的是你所追求的,请尝试Guava项目中的以下内容:stringBuilder.toString()
应使用 BufferedWriter 来优化写入操作(始终使用编写器而不是 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 带宽,除非另一个线程在写入的同时尝试从磁盘读取大量数据。