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

