FileInputStream在.close()NPE上崩溃

时间:2013-12-10 14:16:04

标签: java android asynchronous file-io

为什么我的应用程序崩溃了?它在fis.close();行崩溃了。 这是doInBackground的{​​{1}}方法。

AsyncTask

-

    String collected = null;
    FileInputStream fis = null;
    try {
        fis = openFileInput(FILENAME);
        byte[] dataArray = new byte[fis.available()];
        while (fis.read(dataArray) != -1) {
            collected = new String(dataArray);
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            fis.close();
            return collected;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return null;
}

2 个答案:

答案 0 :(得分:1)

很可能openFileInput(FILENAME);正在抛出异常。 这意味着您正在尝试关闭null流。 在关闭null之前检查InputStream

答案 1 :(得分:1)

openFileInput是否有机会返回null?在这种情况下,NullPointerException会在第byte[] dataArray = new byte[fis.available()];行被静默吞下。

执行将跳转到finally块,其中将抛出异常,因为它没有在任何catch块中处理。