Dumping a Java StringBuilder to File
As pointed out by others, use a Writer, and use a BufferedWriter, but then don't call writer.write(stringBuilder.toString());
instead just writer.append(stringBuilder);
.
EDIT: But, I see that you accepted a different answer because it was a one-liner. But that solution has two problems:
it doesn't accept a
java.nio.Charset
. BAD. You should always specify a Charset explicitly.it's still making you suffer a
stringBuilder.toString()
. If the simplicity is really what you're after, try the following from the Guava project:
Files.write(stringBuilder, file, Charsets.UTF_8)
You should use a BufferedWriter to optimize the writes (always write character data using a Writer instead of an OutputStream). If you weren't writing character data, you would use a 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();
}
or, using try-with-resources (Java 7 and up)
File file = new File("path/to/file.txt");
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
writer.append(stringBuilder);
}
Since you're ultimately writing to a file, a better approach would be to write to the BufferedWriter more often instead of creating a huge StringBuilder in-memory and writing everything at the end (depending on your use-case, you might even be able to eliminate the StringBuilder entirely). Writing incrementally during processing will save memory and will make better use of your limited I/O bandwidth, unless another thread is trying to read a lot of data from the disk at the same time you're writing.