Java 如何按行读取
平时写代码时,你会不会遇到要处理文本文件的场景?比如批量整理用户的聊天记录、把旧的Excel导出文件里的内容按行拆分处理?这时候“按行读取”就成了很实用的小技能,哪怕是用Java这种常见的编程语言,也不用搞得太复杂。
最常用的基础方法:用BufferedReader读文件
Java里最经典的按行读取工具是BufferedReader,就像你用勺子慢慢舀着喝一碗汤,每次只舀一口(一行内容),不会一下子把整碗汤泼出来,既省内存又不容易出错。

举个生活化的例子:你要整理手机里存的几十条备忘录,总不能一口气把所有备忘录都复制到电脑里,而是一条一条慢慢整理,这和BufferedReader的原理一样,它会一次读一行,不会把整个文件的内容都塞进内存,就算是1G以上的大文件,用它也不会卡。
用代码写的话,大概是这样的:先创建一个读文件的输入流,再套上BufferedReader,然后循环读每一行,直到读到空的内容(也就是文件结束了),最后记得关掉工具,不然可能会占着资源。
更省心的方法:用Files.readAllLines读全部行
有时候你要处理的是小文件,比如只有几KB的笔记,完全不用这么麻烦,直接用Java 8之后加入的Files工具类,一句话就能把所有行都读进一个列表里。
还是用备忘录的例子:如果只有10条备忘录,你可以直接把它们全部导出到电脑,再一起整理,不用一条一条复制。这个方法就是把文件的所有行一次性读出来,适合小文件,因为不用循环,代码更短,也不容易写错。
不过要注意,要是文件特别大,这个方法就不合适了,就像你非要把一整桶水直接倒进杯子,会溢出来(内存不够),这时候还是得用前面的BufferedReader。
新手要注意的小细节
很多新手第一次写按行读取的代码,容易犯两个小错误,其实只要留心就能避免。
第一个是忘记关闭资源:就像你借了别人的笔记本,用完不还给人家,下次别人要用的时候就拿不到了。在Java里,要是读完文件不关BufferedReader,这个文件就会一直被占用,别的程序没法修改它。现在可以用try-with-resources的写法,不用手动关,Java会自动处理,就像你用完东西直接放回原位,不用特意说“我用完了”。
第二个是处理空行的情况:有时候文件里会有空白行,比如你复制网页内容粘贴成文件时,不小心多了换行,要是你需要的是有效内容,可以加个小判断,读到空行就跳过,就像整理备忘录时,看到空白的就直接翻过去,不用浪费时间。
其实按行读取的核心,就是“按需读、不浪费”,根据文件大小选合适的方法就行。小文件用简单的方法,大文件用稳妥的方法,再留心资源和空行的小细节,就能写出没问题的代码。