You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:42:25