行业资讯 2025年08月6日
0 收藏 0 点赞 235 浏览 1414 个字
摘要 :

文章目录 1.使用行流计算行数 2. 使用LineNumberReader 3.使用Files.readAllLines()读取小文件 4.结论 学习使用Java的行流和LineNumberReader类来计算文件中的所有行数……




  • 1.使用行流计算行数
  • 2. 使用LineNumberReader
  • 3.使用Files.readAllLines()读取小文件
  • 4.结论

学习使用Java的行流和LineNumberReader类来计算文件中的所有行数。在所有列出的解决方案中,我们都是逐行进行迭代,直到遇到最后一行。

1.使用行流计算行数

Files.lines()方法可以用于从指定的文本文件中获取行流。然后,我们可以使用stream.count()方法来计算流中的元素数量。

需要注意的是,通过关闭流来关闭文件。因此,为了保持代码简洁,我们可以使用try-with-resources语句,它会在使用后自动关闭流。

这种方法不需要将整个文件都保存在内存中,因此对于大型文件是一种有效的解决方案。

String fileName = \"c:/temp\";
long noOfLines = -1;
try (Stream<String> fileStream = Files.lines(Paths.get(fileName))) {
    //行数
      noOfLines = (int) fileStream.count();
}

2. 使用LineNumberReader

LineNumberReader是一个输入流读取器,可以跟踪记录行号。默认情况下,行编号从0开始。

我们可以通过LineNumberReader引用文件并使用skip()跳转到文件的最后一行。此时,我们可以使用getLineNumber()获取行号数量。

此解决方案对于大型文本文件也有效。

String fileName = \"c:/temp\";
long noOfLines = -1;
try(LineNumberReader lineNumberReader =
    new LineNumberReader(new FileReader(new File(fileName)))) {
    //跳到最后一行
      lineNumberReader.skip(Long.MAX_VALUE);
      noOfLines = lineNumberReader.getLineNumber() + 1;
}

3.使用Files.readAllLines()读取小文件

对于小文件,我们也可以使用前两种解决方案。但是如果文件很小,我们稍后要在应用程序代码中参考文件内容,那么将整个文件读取到内存中是有意义的。

readAllLines()方法读取整个文件并返回所有行的字符串列表。要计算所有行数,请使用list.size()方法。

这种解决方案要求整个文件都要保存在内存中,因此对于大型文件来说不是一种有效的解决方案。

String fileName = \"c:/temp\";
long noOfLines = -1;
try(LineNumberReader lineNumberReader =
        new LineNumberReader(new FileReader(new File(fileName)))) {
      lineNumberReader.skip(Long.MAX_VALUE);
      noOfLines = lineNumberReader.getLineNumber() + 1;
}

4.结论

在这篇简短的Java教程中,我们学会了使用Java查找文件中的总行数。我们看到了有效解决方案的行流和LineNumberReader,还看到了将整个文件读取到列表中的不良解决方案。
建议尝试每种解决方案以进行性能比较,以找到最适合您需求的最佳解决方案。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9466.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号