在Java中使用try / catch打开文件有替代方法吗?

时间:2014-12-17 15:21:50

标签: java c++ file exception-handling try-catch

我记得在我的c++课程中,我们会在打开文件时使用以下代码来处理错误:

ifstream in;
in.open("foo.txt");
if(in.fail()){
   cout << "FAILURE. EXITING..." << endl;
   exit(0);
}

现在我正在学习java,我在使用try/catch语句时遇到了问题,因为当我创建一个扫描程序来读取我的输入文件时,它在try之外无法识别1}}代码块。在fail()中是否有exit(0)java的等价物,还是有更好的方法?

3 个答案:

答案 0 :(得分:3)

  

我在使用try / catch语句时遇到了问题,因为当我创建一个扫描程序来读取我的输入文件时,它并没有被识别出来之外的尝试&#39;尝试&#39;代码块。

好!你不应该在try区块之外使用它。文件的所有相关处理都应该在内部 try块中,例如:

try (
    InputStream istream = new FileInputStream(/*...*/); // Or Reader or something
    Scanner scanner = new Scanner(istream)
    ) {
    // Use `scanner` here
}
// Don't use `scanner` here

(那是使用新的try-with-resources。)

在上文中,我假设当你说Scanner时,你是专门讨论Scanner类。

回答您的实际问题:不,这不是Java代码中的标准做法。 Java包含异常。

答案 1 :(得分:1)

要让Scannertry...catch块之外可见,只需在块之外声明变量:

Scanner scanner = null;

try {
    scanner = ... //Initialize scanner
} catch (IOException e) {
    //Catch
}

现在,您可以在try...catch块之外使用扫描仪对象。要检查初始化是否成功,您可以检查null是否真的必须,但通常应在catch块内进行错误处理,例如

try {
    scanner = ... //Initialize scanner
} catch (IOException e) {
    System.out.println("Failure. Exiting");
    exit(1);
}

答案 2 :(得分:0)

您可以将throws Exception添加到使用扫描程序的方法中。

void method_name()抛出异常{方法的定义}

由此,方法知道代码的某些部分将抛出异常并需要处理。