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

Java 从FileChannel到字符串流读取所有行,java,java-8,java-stream,nio,Java,Java 8,Java Stream,Nio,对于我的特定任务,我需要将数据从文件通道读取到字符串的流(或集合) 在常规的NIO中,对于路径我们可以使用一种方便的方法Files.lines(…),它返回一个流。我需要得到相同的结果,但是从FileChannel而不是Path: public static Stream<String> lines(final FileChannel channel) { //... } 公共静态流行(最终文件通道){ //... } 有什么办法吗?我假设您希望在返回的流关闭时关闭通道,因此最简

对于我的特定任务,我需要将数据从
文件通道
读取到
字符串
(或
集合

在常规的
NIO
中,对于
路径
我们可以使用一种方便的方法
Files.lines(…)
,它返回一个
。我需要得到相同的结果,但是从
FileChannel
而不是
Path

public static Stream<String> lines(final FileChannel channel) {
//...
}
公共静态流行(最终文件通道){
//...
}

有什么办法吗?

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

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){
BufferedReader br=新的BufferedReader(Channels.newReader(channel,“UTF-8”));
返回br.lines().onClose(()->{
请尝试{br.close();}
catch(IOException ex){抛出新的未选中的异常(ex);}
});
}
它实际上不需要
FileChannel
作为输入,一个
ReadableByteChannel
就足够了


注意,这也属于“常规NIO”
java.nio.file
有时会出错。

噢,该死,您刚刚通过
onClose
纠正了我们代码库中的一个错误。非常感谢。