Java NIO Files count()计算行数的方法

Java NIO Files count()计算行数的方法,java,file-io,inputstream,nio,Java,File Io,Inputstream,Nio,我使用下面的代码来计算文件中的行数 long numberOfLines = Files.lines(filePath).count(); 根据上述输出,如果行数为1,则记录的分隔符(从行的最后一个字符提取)应替换为\n。分隔符被很好地替换了,但是当我尝试在这个操作之后删除这个文件时,它没有起作用 if (numberOfLines == 1) { String rawData = (new String(Files.readAllBytes(filePath)

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

long numberOfLines = Files.lines(filePath).count();
根据上述输出,如果行数为1,则记录的分隔符(从行的最后一个字符提取)应替换为
\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的行数,并在最后关闭它,删除操作工作正常


这就是
文件.行(字符串)
的行为方式吗?它似乎没有关闭用于访问文件的对象。

您可以使用
尝试使用资源

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

然后,您可以继续使用逻辑,但流应该已经关闭。

文件。行
不关闭流警告:使用平台的默认字符集时,将文本读取为UTF-8。字符集不一致。@gtgaxiola不知道这是故意的。谢谢你的信息和链接。