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

Java中BufferedReader存入char数组后无输出的问题排查

嘿,我立刻就发现你代码里的问题啦!导致没有输出的核心原因有两个,而且你的异常处理还把关键错误信息给隐藏了,难怪你找不到问题所在:

1. 空指针异常被悄悄吞掉,程序根本没走到输出逻辑

你把char[] sentence初始化为null,然后直接在while循环里给sentence[j]赋值——这就像要往一个还没创建的空盒子里放东西,肯定会触发NullPointerException!更糟的是,你的Main方法里的异常捕获块是空的:

catch(Exception e){};

它把所有异常都吞得一干二净,你完全看不到程序运行时的错误提示,自然不知道为什么没有输出。

2. 无法用未初始化的数组存储未知长度的文件内容

你不知道目标文本文件有多少字符,提前把数组设为null或者固定长度的话,要么直接空指针,要么数组容量不够导致越界异常。


修正后的代码方案

推荐用StringBuilder动态存储字符(不用操心数组长度),之后再转成char[]供正则操作使用,同时修复异常处理:

import java.io.BufferedReader;
import java.io.FileReader;

public class Main {
    public static void main(String[] args) {
        try {
            Task2.doTask2();
        } catch(Exception e) {
            // 别吞异常!打印错误信息才能排查问题
            e.printStackTrace();
        }
    }
}

class Task2 {
    public static void doTask2() throws Exception {
        FileReader fr = new FileReader("F:\\Filip\\TextTask2.txt");
        BufferedReader br = new BufferedReader(fr);
        
        // 用StringBuilder动态存储所有字符,自动扩容
        StringBuilder sb = new StringBuilder();
        int i;
        while((i = br.read()) != -1) {
            sb.append((char)i);
        }
        
        // 转成char数组供后续正则操作
        char[] sentence = sb.toString().toCharArray();
        
        // 验证输出
        for(char c : sentence) {
            System.out.print(c);
        }
        
        // 手动关闭流
        br.close();
        fr.close();
    }
}

更优雅的优化:用try-with-resources自动管理流

为了避免忘记关闭流或者异常时流未关闭的问题,推荐使用Java 7+的try-with-resources语法,它会自动关闭实现AutoCloseable接口的资源:

class Task2 {
    public static void doTask2() throws Exception {
        // try-with-resources会在代码块结束后自动关闭fr和br
        try (FileReader fr = new FileReader("F:\\Filip\\TextTask2.txt");
             BufferedReader br = new BufferedReader(fr)) {
            StringBuilder sb = new StringBuilder();
            int i;
            while((i = br.read()) != -1) {
                sb.append((char)i);
            }
            
            char[] sentence = sb.toString().toCharArray();
            // 也可以直接打印StringBuilder内容,不用转数组
            System.out.println(sb);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:02