Java中的Try/Catch块

Java中的Try/Catch块,java,exception,try-catch,Java,Exception,Try Catch,对于分配给我的程序,我们必须从文本文件中读取,创建一个名为NameInformation的对象数组列表,其中包含文件中的信息,然后提示用户输入名称和性别(性别是NameInformation类中的变量之一)计算机会告诉有多少男孩或女孩有这个名字 可以在try-catch块之外访问和使用文件吗?我想试试这样的东西: try { FileReader inFile = new FileReader (FILE_NAME); } catch (FileNotFoundException e) {

对于分配给我的程序,我们必须从文本文件中读取,创建一个名为NameInformation的对象数组列表,其中包含文件中的信息,然后提示用户输入名称和性别(性别是NameInformation类中的变量之一)计算机会告诉有多少男孩或女孩有这个名字

可以在try-catch块之外访问和使用文件吗?我想试试这样的东西:

try {
   FileReader inFile = new FileReader (FILE_NAME);
} catch (FileNotFoundException e) {
   System.out.println ("The file " + FILE_NAME + " does not exist");
   System.exit(-1);
}

Scanner file = new Scanner (infile);
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>();

但这并不能完全满足我的要求。

您可以这样做,并且只向try-catch块中抛出错误代码,您无论如何都不会传递catch块,因为系统在那里存在,否则您应该检查文件在之后是否为空:

FileReader inFile = null;
try {
   inFile = new FileReader (FILE_NAME);
} catch (FileNotFoundException e) {
   System.out.println ("The file " + FILE_NAME + " does not exist");
   System.exit(-1);
}

Scanner file = new Scanner (infile);
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>();
FileReader infle=null;
试一试{
infle=新文件读取器(文件名);
}catch(filenotfounde异常){
System.out.println(“文件“+文件名+”不存在”);
系统退出(-1);
}
扫描仪文件=新扫描仪(填充);
ArrayList nameList=新的ArrayList();

初始化文件应在Try-Catch块中。但是您应该在块外部声明它,以便在块外部访问它。例如:

FileReader inFile = null;
try {
    inFile = new FileReader (FILE_NAME);
} catch (FileNotFoundException e) {
    System.out.println ("The file " + FILE_NAME + " does not exist");
    System.exit(-1);
}

Scanner file = new Scanner (infile);
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>();
FileReader infle=null;
试一试{
infle=新文件读取器(文件名);
}catch(filenotfounde异常){
System.out.println(“文件“+文件名+”不存在”);
系统退出(-1);
}
扫描仪文件=新扫描仪(填充);
ArrayList nameList=新的ArrayList();

“快速修复”将是
文件读取器infle=null;请尝试{infle=…}catch(…){…}Scanner file=new Scanner(infle)。将
infle
变量移到
try/catch
块之外以增加其范围。另外请注意
newscanner(infle)
中的拼写错误,您的变量拼写错误。如果try块是“massible”,则表示块中的代码行太多。重构以引入方法:
试试{List List=readInformationFrom(infle);}
@Tom这个快速修复方法很难看。它只有在catch块调用System.exit()时才起作用。如果没有,快速修复将导致NullPointerException。@JBNizet这就是为什么它是一个快速修复和注释,而不是一个好的修复和回答:P.我个人会使用try with resources语句来代替。@Tom,是的,我发现我的问题中键入了infle。它应该像你提到的那样读“新扫描仪(内嵌)”。
FileReader inFile = null;
try {
    inFile = new FileReader (FILE_NAME);
} catch (FileNotFoundException e) {
    System.out.println ("The file " + FILE_NAME + " does not exist");
    System.exit(-1);
}

Scanner file = new Scanner (infile);
ArrayList<NameInformation> nameList = new ArrayList<NameInformation>();