NutzCN Logo
问答 我有InputStream,想读取出内容,有什么方便的方法么?
发布于 2855天前 作者 qq_16dd5808 1930 次浏览 复制 上一个帖子 下一个帖子
标签:

目前我是这样用的,使用了Lang.readAll和Streams.utf8r的方法组合,在Files工具类里面有什么简便的方式么?
···
public static void read(String path) {
FileSystem fs = getFileSystem(path);
try (FSDataInputStream is = fs.open(new Path(path));) {
String content = Lang.readAll(Streams.utf8r(is));

        System.out.println(content);
    } catch (IOException e) {
        logger.error(ExceptionKit.getStackTrace(e));
    }
}

···

8 回复

用nutz的org.nutz.lang.Files类

return Files.read(path);

啊,我没有太描述清楚。我这个文件十分的巨大,因为是FSDataInputStream ,文件内容虽然是一行一行的文本。但是这个文件一般都10多G。读取会内存溢出

那你想咋样? 逐行处理?

Files.readLine(new File(path), (line)-> {
   System.out.println(line);
});

嗯,一行一行处理。这样内存消耗少一点。
我这里只有FSDataInputStream,那个new File()这部分应该换成什么?

Streams.eachLine(Streams.utf8r(is), (index, ele, len)-> {
   System.out.println(ele);
});

OK。我试试看。多谢wendal

@Test
    public void t9() {
        FSDataInputStream is = HdfsKit.read("/gbfile/2.txt");
        Streams.eachLine(Streams.utf8r(is), new Each<String>() {
            @Override
            public void invoke(int index, String ele, int length) throws ExitLoop, ContinueLoop, LoopException {
                System.out.println(ele);
            }
        });
    }

我这样写了。
文件流什么的不需要我自己处理关闭吧?

它会自动关掉

添加回复
请先登陆
回到顶部