从FileChannel读取所有行到字符串流

时间:2017-06-14 12:33:51

标签: java java-8 java-stream nio

对于我的具体任务,我需要阅读从FileChannelStream(或CollectionString的数据。

对于NIO的常规Path,我们可以使用方便的Files.lines(...)方法返回Stream<String>。我需要获得相同的结果,但需要FileChannel而不是Path

public static Stream<String> lines(final FileChannel channel) {
//...
}

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:10)

我假设您希望在返回的Stream关闭时关闭频道,因此最简单的方法是

public static Stream<String> lines(FileChannel channel) {
    BufferedReader br = new BufferedReader(Channels.newReader(channel, "UTF-8"));
    return br.lines().onClose(() -> {
        try { br.close(); }
        catch (IOException ex) { throw new UncheckedIOException(ex); }
    });
}

实际上并不需要FileChannel作为输入,ReadableByteChannel就足够了。

请注意,这也属于“常规NIO”; java.nio.file有时是referred to as “NIO.2”