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

Java新手求助:Scanner读文件异常未处理及文件数组初始化后无法使用问题

解决你的Java文件读取与异常处理问题

嘿,作为Java新手碰到这些问题太正常了,我来帮你一步步理清并解决它们~

首先,修复代码里的语法错误

你写的代码里犯了一个基础语法错误:把整个InputFile类嵌套在了main方法里面,这在Java里是不允许的。先把嵌套的类结构拆掉,整理成正确的类结构:

import java.io.*;
import java.util.Scanner;

public class InputFile { 
    public static void main(String[] args) { 
        Scanner inFile; 
        // 移除嵌套类,把核心逻辑放在main方法内
        inFile = new Scanner(new File("artwork_info.txt")); 
        int quantity = Integer.parseInt(inFile.nextLine()); 
        // 记得用完Scanner要关闭,避免资源泄漏
        inFile.close();
    }
}

处理FileNotFoundException异常

这个异常是Java的检查型异常,编译器会强制要求你必须处理它,不然就会报错。有两种常用的处理方式:

方式1:在main方法上声明抛出异常

如果只是简单的练习程序,可以直接在main方法签名上添加throws FileNotFoundException,把异常抛给JVM处理:

import java.io.*;
import java.util.Scanner;

public class InputFile { 
    // 在这里声明抛出异常,让JVM处理后续逻辑
    public static void main(String[] args) throws FileNotFoundException { 
        Scanner inFile = new Scanner(new File("artwork_info.txt")); 
        int quantity = Integer.parseInt(inFile.nextLine()); 
        inFile.close();
    }
}

方式2:用try-catch-finally块捕获处理异常

如果是正式项目,更推荐用try-catch来捕获异常,还可以加上finally确保资源关闭;或者用Java 7+的try-with-resources自动关闭资源,更简洁:

import java.io.*;
import java.util.Scanner;

public class InputFile { 
    public static void main(String[] args) { 
        // try-with-resources会自动关闭实现AutoCloseable接口的资源(比如Scanner)
        try (Scanner inFile = new Scanner(new File("artwork_info.txt"))) {
            int quantity = Integer.parseInt(inFile.nextLine()); 
            System.out.println("读取到的数量:" + quantity);
        } catch (FileNotFoundException e) {
            // 这里处理文件找不到的情况,比如给用户提示
            System.out.println("找不到指定的文件:artwork_info.txt");
            e.printStackTrace();
        }
    }
}

解决异常处理后无法使用数组的问题

你说的“添加异常处理后无法使用数组”,大概率是作用域问题——你把数组声明在了try块内部,导致try块外面的代码访问不到它。解决方法很简单:把数组的声明移到try块外面,在try块里面初始化数组。

举个完整的例子:

import java.io.*;
import java.util.Scanner;

public class InputFile { 
    public static void main(String[] args) { 
        // 把数组声明在try块外面,扩大作用域
        String[] artworkNames = null;
        int quantity = 0;

        try (Scanner inFile = new Scanner(new File("artwork_info.txt"))) {
            // 先读取数量
            quantity = Integer.parseInt(inFile.nextLine());
            // 在try块内初始化数组
            artworkNames = new String[quantity];
            // 循环读取内容到数组
            for (int i = 0; i < quantity; i++) {
                artworkNames[i] = inFile.nextLine();
            }
        } catch (FileNotFoundException e) {
            System.out.println("找不到指定的文件:artwork_info.txt");
            e.printStackTrace();
        }

        // 现在在try块外面也能访问数组了(注意先判断数组是否为null,避免空指针)
        if (artworkNames != null) {
            System.out.println("读取到的作品名称:");
            for (String name : artworkNames) {
                System.out.println(name);
            }
        }
    }
}

这样处理后,数组的作用域覆盖了try块和后续代码,只要初始化成功,就能在外面正常使用啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:39:50