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

Java读取文件字符至空格时程序未终止问题求助

问题分析与解决方案

你的代码遇到空格没终止,主要有两个潜在问题,咱们一步步来理清楚:

1. 未处理文件读取到末尾的情况

FileReader.read()方法返回的是int类型:当读取到有效字符时返回对应字符的ASCII码,当文件读取完毕时返回-1。你直接把返回值强转成char,会把-1转换成\uFFFF(一个Unicode占位符字符),这个值不等于空格' ',所以如果文件里没有空格,循环会无限执行下去——哪怕已经读到文件末尾了。

2. 可能的空格类型不匹配

如果文件里的“空格”不是普通的半角空格' '(比如全角空格、制表符\t、换行符等),你的判断条件c == ' '也不会触发终止。


修正后的代码

先解决最关键的文件末尾判断问题,同时优化资源管理(避免流泄漏):

方式1:使用try-finally关闭流

int intChar;
FileReader fr = new FileReader("text.txt");
try {
    // 先判断是否读到文件末尾,再处理字符
    while ((intChar = fr.read()) != -1) {
        char c = (char) intChar;
        // 遇到半角空格就终止循环
        if (c == ' ') {
            break;
        }
        System.out.println(c);
    }
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (fr != null) fr.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

方式2:推荐使用try-with-resources(自动关闭流)

Java 7及以上支持的语法,更简洁安全:

try (FileReader fr = new FileReader("text.txt")) {
    int intChar;
    while ((intChar = fr.read()) != -1) {
        char c = (char) intChar;
        // 如果要匹配所有空白字符(全角空格、制表符等),可以换成Character.isWhitespace(c)
        if (c == ' ') {
            break;
        }
        System.out.println(c);
    }
} catch (IOException e) {
    e.printStackTrace();
}

额外提示

如果你的需求是遇到任意空白字符都终止,把判断条件改成Character.isWhitespace(c)即可,这个方法会匹配半角空格、全角空格、制表符、换行符等所有空白类字符。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:43:35