Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中是否有其他方法可以用来打开文件?_Java_C++_File_Exception Handling_Try Catch - Fatal编程技术网

在Java中是否有其他方法可以用来打开文件?

在Java中是否有其他方法可以用来打开文件?,java,c++,file,exception-handling,try-catch,Java,C++,File,Exception Handling,Try Catch,我记得在我的c++课程中,我们在打开文件时会使用以下代码来处理错误: ifstream in; in.open("foo.txt"); if(in.fail()){ cout << "FAILURE. EXITING..." << endl; exit(0); } ifstreamin; in.open(“foo.txt”); if(in.fail()){ 库特 我在使用try/catch语句时遇到问题,因为当我创建一个扫描器来读取输入文件时,它在“try”

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

ifstream in;
in.open("foo.txt");
if(in.fail()){
   cout << "FAILURE. EXITING..." << endl;
   exit(0);
}
ifstreamin;
in.open(“foo.txt”);
if(in.fail()){
库特
我在使用try/catch语句时遇到问题,因为当我创建一个扫描器来读取输入文件时,它在“try”代码块之外无法识别

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

try (
    InputStream istream = new FileInputStream(/*...*/); // Or Reader or something
    Scanner scanner = new Scanner(istream)
    ) {
    // Use `scanner` here
}
// Don't use `scanner` here
(这是对资源的新尝试。)

在上面,我假设当你说Scanner时,你是在特别谈论
Scanner


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

要使
扫描仪在
try…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);
}

您可以将抛出异常添加到使用scanner的方法中

void方法_name()引发异常{方法的定义}


通过这种方式,方法知道部分代码将抛出异常并需要处理。

在使用它的方法中使用
throws
,查看变量范围。@Dinal24这如何防止使用try/catch(除非您希望程序崩溃)在C++ C++中java语言编写的代码,不使用Java作为向导编写Java代码,也不要用Java编写C++代码作为指导。老实说,我更像C++的人,但是java接口更漂亮。为什么你说,@ T.J.Cuuldor?唯一的例外原因不是文件的实际打开吗?@ BREntAllard:扫描仪是用来读取文件的,对吗?或者我误解了吗?因此,除了读取文件外,扫描仪的存在没有任何意义。不,这就是我使用扫描仪所做的。我明白你的意思,但除了打开文件外,还有什么可能导致异常?@BrentAllard:任何文件读取操作都可能导致异常(例如,I/O错误),因此所有
扫描仪
的各种“下一步”ops可能会抛出。但最基本的一点是:如果扫描器用于读取文件,那么扫描器的唯一用途应该是在
try
块中,这取决于是否成功打开文件。@BrentAllard:如果您是Java新手,那么try with resources语句对您的作用可能值得一提无论您在
()
之后打开
try
,当控件出于任何原因(正常执行离开块、异常等)从
try
中传出时,都将自动关闭(按相反顺序),并且在出现异常的情况下,它会关闭内容,而不会让关闭操作期间的任何异常掩盖发生的主要异常。因此,它大大简化了代码。