This question already has an answer here:
Closed 4 years ago.
Suppose I have a java.util.stream.Stream
of objects with some nice toString
method:
What's the shortest/most elegant solution to write this stream to a file, one line per stream element?
For reading, there is the nice Files.lines
method, so I thought there must be a symmetric method for writing to file, but could not find one.
Files.write
only takes an iterable.
Probably the shortest way is to use Files.write
along with the trick which converts the Stream
to the Iterable
:
Files.write(Paths.get(filePath), (Iterable<String>)stream::iterator);
For example:
Files.write(Paths.get("/tmp/numbers.txt"),
(Iterable<String>)IntStream.range(0, 5000).mapToObj(String::valueOf)::iterator);
If it looks too hackish, use more explicit approach:
try(PrintWriter pw = new PrintWriter(Files.newBufferedWriter(
Paths.get("/tmp/numbers.txt")))) {
IntStream.range(0, 5000).mapToObj(String::valueOf).forEach(pw::println);
}
If you have stream of some custom objects, you can always add the .map(Object::toString)
step to apply the toString()
method.