首页 > 解决方案 > Java NIO Files count() 计算行数的方法

问题描述

我正在使用下面的代码来计算文件中的行数。

long numberOfLines = Files.lines(filePath).count();

根据上述输出,如果行数为 1,则记录delimiter(从行的最后一个字符中提取)应替换为<delimiter>\n. 分隔符被替换得很好,但是当我在此操作后尝试删除此文件时,它不起作用。

if (numberOfLines == 1) {
                String rawData = (new String(Files.readAllBytes(filePath))).trim();
                String toReplace = rawData.substring(rawData.length() - 1);
                String outString = rawData.replaceAll(toReplace, toReplace + "\n");
                Files.delete(filePath);
            }

该文件位于文件系统中,文件大小与删除操作之前的文件大小相同。我试图打开这个文件,它显示了一个“拒绝访问”错误。

Files.lines(filePath).count();用自定义的java方法替换了使用InputStream计算行数并最终关闭它,删除操作工作正常。

这是Files.lines(String)应该怎么做的?似乎它没有关闭它用来访问文件的对象。

标签: javafile-ioinputstreamnio

解决方案


You can use try-with-resources

long numberofLines = 0;
try (Stream<String> stream = Files.lines(filePath)) {
        numberOfLines = stream.count();
} catch (IOException ex) {
    //catch exception
}

Then you can continue with your logic but the stream should already be closed.


推荐阅读