为什么我会得到NullPointerException?bufferWriter.close()

8 浏览
0 Comments

为什么我会得到NullPointerException?bufferWriter.close()

我是新手,但我正在编写一个应用程序,但我一直遇到这个错误,导致应用程序在启动时崩溃。\n错误的代码在下面的类中,有一行标有HERE的注释,表示有问题的行。\n这是我从中调用该方法的代码。\n这是堆栈跟踪。谢谢任何帮助。

0
0 Comments

在上述代码中,出现了一个NullPointerException,具体是在bufferWriter.close()这一行代码出现的。这个问题的原因是bufferWriter对象为null,因此无法调用其方法。

要解决这个问题,可以在try-with-resources语句中添加一个额外的catch块来处理IOException,然后在catch块中检查bufferWriter是否为null,如果不为null,则调用其close()方法。下面是修改后的代码:

public void createFile(String title, String storeValue){
    try (
        FileOutputStream fileOutputStream = openFileOutput(title, Context.MODE_PRIVATE);
        BufferedWriter bufferWriter = new BufferedWriter(new OutputStreamWriter(fileOutputStream))
    ) {
        String content = storeValue;
        bufferWriter.write(content);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
        if (bufferWriter != null) {
            try {
                bufferWriter.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

通过以上修改,我们在catch块中增加了一个对IOException的捕获,并在捕获到IOException后,检查bufferWriter是否为null,如果不为null,则调用其close()方法进行资源的关闭,从而解决了NullPointerException的问题。

0
0 Comments

为什么会出现NullPointerException?bufferWriter.close()这个问题的原因可能是bufferWriter为空。可能是您提供的文件不可用导致的。如果bufferWriter为空,这将防止出现NullPointerException。解决方法是在bufferWriter.close()之前添加一个条件判断,确保bufferWriter不为空。最终的代码如下:

finally {
    if(bufferWriter!=null){
        bufferWriter.close();/**HERE*/
    }
}

0
0 Comments

openFileOutput()方法抛出异常时,会出现这种情况。由于抛出了异常,bufferWriter未被初始化为有效对象。异常导致执行跳过try块的其余部分,进入catch块,然后进入finally块。所以当执行到finally块时,bufferWriternull。为了解决这个问题,在调用bufferWriter的close方法之前,检查是否为null。或者,更好的方法是使用try with resources

finally {
    try {
        if (bufferWriter != null)
            bufferWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

要修复这个问题,在bufferWriter调用close之前,检查是否为null。或者,更好的方法是使用try with resources

try(BufferedWriter = new BufferedWriter(
                     new OutputStreamWriter(
                         openFileOutput(title, Context.MODE_PRIVATE)))) {}

0