`
silent2N
  • 浏览: 7733 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

以最快的速度获取文本行数(使用Java)

阅读更多
业务场景:用户通过浏览器上传文件,后台须判断此文本文件的行数是否超过限制(50行)

涉及技术:Apache表单文件,JDK的io

代码片段:
        //判断文件行数,formFile是表单文件类org.apache.struts.upload.FormFile
        LineNumberReader lnr = new LineNumberReader(new InputStreamReader(formFile.getInputStream()));
        lnr.skip(formFile.getFileSize());
        if(lnr.getLineNumber() + 1 >= 50) {
            //err输出“文件行数不能超过50行!”
        }
        lnr.close();


优缺点:我认为优点是不用遍历了,缺点不能辨别空白行

小弟抛砖引玉,大家评论下这段代码吧,说说如何用Java最有效率的获取文本行数
分享到:
评论
20 楼 silent2N 2010-12-13  
mercyblitz 写道
文件如果有2G,你怎么统计?


2G。。。客户还没上传完就超时了吧
19 楼 silent2N 2010-12-13  
beyond736 写道
先读取文件 Content
System.out.println(Content.split("\r\n").length);


嗯,很有Groovy的感觉
18 楼 silent2N 2010-12-13  
gh_aiyz 写道
所谓行数无非就是判断回车换行出现的次数,文本文件本身并不会存储类似的元数据,因此遍历整个文件是毫无疑问的,无论你用任何手段,包括用正则或者第三方库。如果所谓的“快”是指运行效率,可能还不如自己写程序“快”。


你说的对,是我进入误区了
17 楼 mercyblitz 2010-12-13  
文件如果有2G,你怎么统计?
16 楼 beyond736 2010-12-13  
先读取文件 Content
System.out.println(Content.split("\r\n").length);
15 楼 gh_aiyz 2010-12-13  
所谓行数无非就是判断回车换行出现的次数,文本文件本身并不会存储类似的元数据,因此遍历整个文件是毫无疑问的,无论你用任何手段,包括用正则或者第三方库。如果所谓的“快”是指运行效率,可能还不如自己写程序“快”。
14 楼 lwf2510 2010-12-13  
s = lnr.readLine() 读取每一行时,要去空行,再加判断,如
if(s.trim().equal("") && s.trim == null){
  ....
}
13 楼 knightzhuwei 2010-12-13  
行数本来就不科学 还是大小比较科学
12 楼 silent2N 2010-12-13  
mathfox 写道
调本地命令得了。wc -l


嗯,可是得跨平台,win下有类似命令么?
11 楼 mathfox 2010-12-13  
调本地命令得了。wc -l
10 楼 zhangcong170 2010-12-13  
silent2N 写道
zhangcong170 写道
LineNumberReader底层是怎么写的?  难道真的不用遍历?


确实,刚看了下LineNumberReader的实现,里面遍历了。唉,本以为找到个方式不用遍历的。。。

用正则是一个不错的方法
9 楼 silent2N 2010-12-13  
smo_apple 写道
数下回车的个数行吗?


好主意,可惜我不会正则,一会忙完了研究研究
8 楼 silent2N 2010-12-13  
zhangcong170 写道
LineNumberReader底层是怎么写的?  难道真的不用遍历?


确实,刚看了下LineNumberReader的实现,里面遍历了。唉,本以为找到个方式不用遍历的。。。
7 楼 zhangcong170 2010-12-13  
LineNumberReader底层是怎么写的?  难道真的不用遍历?
6 楼 smo_apple 2010-12-13  
数下回车的个数行吗?
5 楼 silent2N 2010-12-13  
piper 写道
觉得java代码嵌入正则表达式最快


请举例
4 楼 silent2N 2010-12-13  
jxygjzh 写道
先问一下

lnr.getLineNumber() + 1 >= 50
为什么要这么写?


很简单,这个api得到的行数是从0开始的,业务上需要从1开始
3 楼 piper 2010-12-13  
觉得java代码嵌入正则表达式最快
2 楼 jxygjzh 2010-12-13  
先问一下

lnr.getLineNumber() + 1 >= 50
为什么要这么写?
1 楼 silent2N 2010-12-13  
难道大家没遇见过这种问题么?获取文本行数的

相关推荐

    Java实现按行分割大文件

    Java实现按行分割大文件需要使用多种技术,例如读取大文件、构建字符串、创建目录、读取文件行、构建字符串、判断文件是否存在、处理异常、记录日志、记录时间、存储分割后的文件、获取文件名和分隔文件名等。

    统计文件行数

    "统计文件行数"工具提供了这样的功能,它强调了其易用性、效率和无需安装的特点,使得用户可以快速便捷地获取所需信息。 统计文件行数通常涉及以下知识点: 1. **文本文件**:大多数编程语言的源代码是文本文件,...

    大文本编辑器

    这款编辑器以其高效的性能和快速的加载速度而备受推崇,尤其在处理海量数据时,如描述中提到的,能够瞬间打开包含25亿行、大小达到2GB的文件。这在很大程度上归功于其独特的数据加载机制——按行加载,这种机制优化...

    Java ResultSet导出大数据.docx

    4. 针对MySQL,确保使用正确的连接参数以启用游标和设置默认获取的记录数,防止内存溢出。 5. 考虑分批处理数据,避免一次性加载所有数据到内存。 6. 对并发场景,要注意控制并发度和IO资源,以避免磁盘IO成为瓶颈。...

    Java_JDBC学习教程 由浅入深.doc

    - 使用 `DatabaseMetaData` 获取关于数据库的信息,如数据库产品名称、版本等。 **11.2 参数元数据信息** - 使用 `ParameterMetaData` 获取关于参数的信息,如参数个数、参数类型等。 #### 十一、批处理的使用 - ...

    Java在处理大数据的时候一些小技巧

    5. 自定义CSV写入:对于CSV文件,可以避免使用特定库,直接按照文本格式写入,以控制内存使用。使用BufferedWriter和OutputStream,配合适当大小的缓冲区,并定期调用flush()方法清空缓冲区。 6. 游标和预编译语句...

    java实现倒序读取文件功能示例分享

    总结来说,这个Java示例提供了一种使用 `RandomAccessFile` 实现倒序读取文件的方法,通过递归和队列管理来高效地获取文件的尾部数据。在实际应用中,可以根据具体需求调整代码,比如增加错误处理、支持流式读取或...

    mysql57驱动jar包

    - InnoDB存储引擎的增强,支持更大的索引和更快的插入速度。 - JSON数据类型的支持,使MySQL能够存储和处理JSON格式的数据。 - 正则表达式函数的改进,提供了更强大的文本搜索功能。 - 查询优化器的升级,包括新的...

    Android TextView自动滚动

    有时,当文本内容超出`TextView`的可视范围时,我们可能需要实现文本的自动滚动功能,以确保用户能够完整阅读所有信息。本篇文章将深入探讨如何在Android中实现`TextView`的上下及左右自动滚动。 一、上下自动滚动 ...

    linux编程工具vim的插件配置合集

    Linux编程工具Vim是一款强大的文本编辑器,深受程序员和系统管理员的喜爱。它的可扩展性是其魅力之一,通过安装各种插件,可以极大地提升编辑效率和功能多样性。...记得定期更新插件,以获取最新的功能和修复。

    android-TextView.rar_android_textview

    `android:singleLine`属性(在API 26及以上版本已弃用)用于限制文本显示为单行,而`android:maxLines`则可以限制文本的最大显示行数。要实现水平滚动,我们需要关注`android:scrollHorizontally`属性,将其设置为`...

    android TextView水平滚动和垂直滚动效果

    在Android开发中,TextView是用于显示单行或多行文本的视图组件,它在许多界面设计中扮演着重要角色。当文本内容过长无法在指定区域内完全显示时,我们可以利用TextView的滚动功能来解决这个问题。本篇文章将深入...

    birt经验之谈转载

    - 当处理大量数据时,可以调整数据集的配置,限制每次从数据源获取的行数,以避免一次性加载所有数据。 - 避免在表格上直接定义过滤器,而是使用独立的数据集来处理大数据,利用数据库级别的查询优化。 在实际...

    深入理解mysql索引底层.zip

    3. 使用合适的数据类型:更小的类型通常意味着更少的磁盘空间,更快的查询速度。 4. 避免过度使用索引:过多的索引会影响写操作性能,应根据查询模式和需求进行选择。 八、InnoDB与MyISAM索引差异 InnoDB支持行级...

    2021-2022计算机二级等级考试试题及答案No.19494.docx

    2. LinkedList 集合方法:LinkedList 是Java编程语言中的一种集合实现,提供了多种操作方法,如getLast()获取最后一个元素,getFirst()获取第一个元素,remove(int index)移除指定位置的元素,next()则用于迭代操作...

    2021-2022计算机二级等级考试试题及答案No.1551.docx

    8. 存储设备的存取速度通常为:硬盘 > 光盘 > 软盘,因此硬盘是最快的。 9. HTML文档的基本结构包括HTML标签、头部(head)、主体(body)等,不包含D选项中的`<style>`标签,它用于定义样式。 10. 网络协议是网络...

    一份超级全面的PHP面试题

    - `echo`:速度最快,用于输出一个或多个字符串,不返回任何值。 - `print`:稍慢于`echo`,也用于输出一个字符串,但返回`1`。 - `print_r`:用于打印变量的可读性较强的表示,常用于调试。 3. **模板分离**:...

    android实现文字垂直滚动

    然后,TextView是Android中最基本的文本显示组件,用于展示单行或多行文本。通常,当TextView的内容超出其可见区域时,它不会自动滚动。然而,通过将TextView放入ScrollView中,我们可以让TextView的内容在需要时...

    2021-2022计算机二级等级考试试题及答案No.9748.docx

    由于`loginName`已经在a.jsp中获取并赋值,因此在b.jsp中直接使用`<%=loginName%>`即可输出其值。 ### 继承的概念 **题目:** 下列对继承的说法,哪个是正确的? A. 子类能继承父类的所有方法和状态 B. 子类能继承...

    2021-2022计算机二级等级考试试题及答案No.3725.docx

    3. 硬盘的转速是衡量其性能的重要参数,常见的转速包括5400rpm和7200rpm,转速越高,硬盘数据读写速度通常越快。 4. ADO(ActiveX Data Objects)中的核心对象包括Connection(连接对象)、Command(命令对象)和...

Global site tag (gtag.js) - Google Analytics