在Try / Catch中初始化

时间:2013-06-01 01:44:25

标签: java android

我在编写应用程序时遇到了很多问题。这是我的问题:

我正在尝试初始化文件输入流,如下所示:

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();
        }

我该怎么办? (提前致谢)

3 个答案:

答案 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();
}