BufferedReader.readLine()无法读取整行仅获首个字符串的原因排查
为什么BufferedReader的readLine()只读取了部分内容?
别担心,readLine()本身的逻辑就是读取完整的一行(直到换行符为止,并且会自动剔除末尾的换行符),不会平白无故截断内容。结合你的情况,我梳理了几个最可能的原因和解决办法:
1. 你的文本文件里藏着看不见的换行符
你看到的“整行内容”,实际上在[98.0,20.0,-65.0]后面可能有一个隐藏的换行符(比如\n、\r,甚至是其他控制字符)——这些字符在普通编辑器里不会显示,但readLine()会把它们当作行尾标记,读到这里就停止了。
验证方式:打开文本编辑器的“显示所有字符”功能(比如Notepad++的「视图→显示符号→显示所有字符」,VS Code的「查看→显示→控制字符」),就能看到这些隐藏的字符了。
2. 文件编码不匹配导致解析错误
FileReader默认使用系统的默认编码来读取文件,如果你的文本文件用了其他编码(比如UTF-8带BOM、GBK等),可能会导致读取时把某些字节误判为换行符。
解决办法:换成指定编码的InputStreamReader来读取,明确指定文件的编码(比如UTF-8):
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; public class TestRead { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream("path/arcs.txt"), StandardCharsets.UTF_8) ); String line = br.readLine(); System.out.println(line); br.close(); } }
3. 实际代码里有你没展示的截断逻辑
如果你的真实代码中,在readLine()之后对line做了额外处理(比如用split(" ")取第一个元素、或者用其他方法拆分字符串),那可能是后续代码把内容截断了。不过从你给出的代码片段来看,这种情况概率很低。
快速排查小技巧
把文本文件里的内容手动复制到一个新建的纯文本文件中,然后用你的代码读取这个新文件。如果输出正常,那就说明原文件确实存在隐藏字符或编码问题。
内容的提问来源于stack exchange,提问作者Eslam
相关产品推荐
相关产品推荐

