Java读取映射网络驱动器文本文件行数异常问题求助
问题原因分析
出现这个问题的核心原因是文件中存在非标准换行符或隐藏的控制字符:
- Scanner默认使用系统原生换行符(Windows下是
\r\n)作为行分隔符,如果文件里是单独的\r、\n,或者存在导致Scanner判定流提前结束的控制字符,就会出现行数统计不全的情况。 - 拖拽文件到本地只是完整复制了原文件的所有内容(包括特殊字符),所以统计结果还是错误;而复制内容到新文件时,系统会自动将换行符转换为本地标准格式,因此能正确统计行数。
解决方案
方案1:修改Scanner的行分隔符,兼容所有常见换行格式
手动指定Scanner的分隔符,匹配\r\n、\n、\r三种常见换行方式,代码修改如下:
public static void main(String[] args) throws FileNotFoundException { File text = new File("N:\\textfile.txt"); Scanner scan = new Scanner(text); // 兼容所有常见换行符 scan.useDelimiter("\\r?\\n|\\r"); int linecount = 0; while(scan.hasNext()) { linecount++; scan.next(); } scan.close(); System.out.println(linecount); }
方案2:改用BufferedReader读取(更推荐,兼容性更强)
BufferedReader的readLine()方法对各种换行符的兼容性比Scanner更好,尤其适合处理大文件或特殊格式文本,代码示例:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new FileReader("N:\\textfile.txt")); int linecount = 0; while(reader.readLine() != null) { linecount++; } reader.close(); System.out.println(linecount); }
额外验证步骤
可以用文本编辑器(比如Notepad++)打开原文件,开启「显示所有字符」功能(视图→显示符号→显示所有字符),检查是否存在非标准换行符或异常控制字符,这有助于定位问题根源。
内容的提问来源于stack exchange,提问作者telephony
相关产品推荐
相关产品推荐

