问题
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.
回答1:
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.
来源:https://stackoverflow.com/questions/32054180/java-8-stream-to-file