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
相关产品推荐
相关产品推荐

