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
纠正了我们代码库中的一个错误。非常感谢。