java - 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)
应该怎么做的?似乎它没有关闭它用来访问文件的对象。
解决方案
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.
推荐阅读
- python - 如何在 Python Flask 中连接到 Teradata
- python - 我们可以在子进程中使用 input() 在参数中赋值吗
- wordpress - 将允许 IP 地址列表包含到特定位置
- react-native - 如何在 React Native(react-native-router-flux)中隐藏特定场景的标签栏?
- java - 在tomcat中为多个war文件分别配置java代理
- xslt - 如果xslt中的条件如何写入行
- spring - 为什么我不能在 Spring Boot 中使用“截断”
- microservices - API 网关上的数据聚合
- javascript - 只有objectID保存在mongodb中另一个模型的数组中
- c# - 编译时间类型检查