我在编写应用程序时遇到了很多问题。这是我的问题:
我正在尝试初始化文件输入流,如下所示:
FileInputStream fis
fis = openFileInput(selectedFile);
然后把这一行放到第一行:
byte[] input = new byte[fis.available()];
问题是两个代码都需要try / catch语句而第二个块无法识别fis,因为它是在try / catch中初始化的。这是我的代码:
private void openFile(String selectedFile) {
String value = "";
FileInputStream fis;
try {
fis = openFileInput(selectedFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
byte[] input = new byte[fis.available()];
} catch (IOException e) {
e.printStackTrace();
}
我该怎么办? (提前致谢)
答案 0 :(得分:1)
在这种情况下,最好的方法是不要捕获IOException。
private void openFile(String selectedFile) throws IOException {
FileInputStream fis = openFileInput(selectedFile);
byte[] input = new byte[fis.available()];
获得FileNotFoundException
后继续没有意义答案 1 :(得分:0)
首次声明变量时设置FileInputStream fis = null;
。
您也可以像这样运行代码,因为IOException也会捕获未找到文件的异常。
String value = "";
FileInputStream fis;
try {
fis = openFileInput(selectedFile);
byte[] input = new byte[fis.available()];
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
将FileInputStream设置为临时值。 null
将是最佳选择,如:
FileInputStream fis = null;
原因是因为如果你的try语句抛出错误,那么fis永远不会被我初始化。那你就会有问题。如果你没有完全退出,你还应该在try / catch块之后添加语句,测试该值是否为null,只是为了使程序不抛出空指针异常。
所以可能是这样的:
if(fis == null) {
return; // Which will just end the method.
}
也可能想把try / catches放在一起(你仍然应该在try之外声明其他东西,至少你计划在代码中直接使用的任何东西)但它可能更有效的编码方式) ,如:
FileInputStream fis = null;
byte[] input = null;
try {
fis = openFileInput(selectedFile);
input = new byte[fis.available()];
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}