How to Initialize an InputStream Before Try/Catch Block(如何在Try/Catch块之前初始化InputStream)
本文介绍了如何在Try/Catch块之前初始化InputStream的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要获取文件名字符串,然后尝试打开该文件。如果找不到该文件,我将进行循环,直到输入正确的字符串。
public static void main(String[] args){
// Get file string until valid input is entered.
System.out.println("Enter file name.
Enter ';' to exit.");
String fileName = sc.nextLine();
boolean fileLoop = true;
InputStream inFile;
while (fileLoop){
try{
inFile = new FileInputStream(fileName);
fileLoop = false;
} catch (FileNotFoundException e) {
System.out.println("That file was not found.
Please re enter file name.
Enter ';' to exit.");
fileName = sc.nextLine();
if (fileName.equals(";")){
return;
}
}
}
// ****** This is where the error is. It says inFile may not have been initalized. ***
exampleMethod(inFile);
}
public static void exampleMethod(InputStream inFile){
// Do stuff with the file.
}
当我尝试调用exampleMethod(InFile)时,NetBeans告诉我InputStream inFile可能尚未初始化。我认为这是因为赋值位于try Catch块内。正如大家所看到的,我尝试在循环外部声明对象,但没有成功。
我还尝试使用以下内容在循环外部初始化输入流:
InputStream inFile = new FileInptStream();
// This yeilds an eror because there are no arguments.
还有这个:
InputStream inFile = new InputStream();
// This doesn't work because InputStream is abstract.
如何确保在初始化此InputStream的同时仍允许循环,直到输入有效输入?
谢谢
推荐答案
要修复此问题,请更改以下代码行:
InputStream inFile;
至此:
InputStream inFile = null;
您必须这样做的原因是Java阻止您使用未初始化的局部变量。使用未初始化的变量通常是一个疏忽,因此Java不允许在此场景中使用它。正如@immibis指出的那样,这个变量将始终被初始化,但编译器在这种情况下不够聪明,无法计算出它。
这篇关于如何在Try/Catch块之前初始化InputStream的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在Try/Catch块之前初始化InputStream
基础教程推荐
猜你喜欢
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01