Java FileReader读取文件输出出现方块符号问题求助
问题原因
你遇到的方块符号是数组中未被文件内容填充的空字符(\u0000)。Java里新建char数组时,所有元素默认初始化为空字符,当你直接输出整个数组时,控制台无法解析这些空字符,就会显示成方块。而讲师的输出正常,是因为他只输出了文件实际读取到的有效字符,没有包含数组里的空字符部分。
解决办法
核心是获取实际读取的字符数,只输出有效部分,同时推荐用更规范的资源管理方式:
1. 获取实际读取长度,截取有效内容输出
reader.read(array)方法会返回实际读取到的字符数量,我们可以用这个数值来截取数组里的有效部分,避免输出空字符:
修改后的代码:
import java.io.*; public class MSReader { public static void main(String[] args) { char[] array = new char[100]; try { Reader reader = new FileReader( "C:\\Users\\ricky\\OneDrive\\Desktop - Lenovo Laptop\\test\\InputStreamExample.txt"); System.out.println("Ready: " + reader.ready()); // 保存实际读取的字符数 int charsRead = reader.read(array); System.out.println("Data in the stream: "); // 只输出有效部分 System.out.println(new String(array, 0, charsRead)); reader.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
2. 用try-with-resources自动管理流(更推荐)
Java 7及以上支持try-with-resources语法,能自动关闭流,避免手动关闭可能出现的资源泄漏问题:
import java.io.*; public class MSReader { public static void main(String[] args) { char[] array = new char[100]; // 把Reader放在try()中,自动关闭 try (Reader reader = new FileReader( "C:\\Users\\ricky\\OneDrive\\Desktop - Lenovo Laptop\\test\\InputStreamExample.txt")) { System.out.println("Ready: " + reader.ready()); int charsRead = reader.read(array); System.out.println("Data in the stream: "); System.out.println(new String(array, 0, charsRead)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
这样修改后,输出就只会显示文件里的实际内容,不会出现方块符号了。
内容的提问来源于stack exchange,提问作者user22966420
相关产品推荐
相关产品推荐

