Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅当流已打开时才关闭流_Java_Objectoutputstream - Fatal编程技术网

Java 仅当流已打开时才关闭流

Java 仅当流已打开时才关闭流,java,objectoutputstream,Java,Objectoutputstream,考虑以下代码: FileOutputStream stream=null; ObjectOutputStream objStr=null; try { stream=new FileOutputStream(defaultFile); objStr=new ObjectOutputStream(stream); objStr.writeObject(obj); objStr.close();

考虑以下代码:

    FileOutputStream stream=null;
    ObjectOutputStream objStr=null;
    try
    {
        stream=new FileOutputStream(defaultFile);
        objStr=new ObjectOutputStream(stream);
        objStr.writeObject(obj);
        objStr.close();
    }
    catch(FileNotFoundException e)
    {
        System.out.println("Il file "+ defaultFile+ " non è stato trovato\n");
    }
    catch(IOException e)
    {
        stream.close();
        System.out.println("Si è verificato un problema di I/O nell' apertura dello  stream");
    }
在第二个catch块中,我关闭了流,但我不确定它是否应该关闭。 如果ObjectOutputStream的构造函数失败,它将进入第二个捕获,但是我确定在这种情况下,FileOutputStream仍然保持打开状态吗? 我应该写一个finally块来处理所有异常吗?
我很难弄清楚所有的情况。

如果您使用的是Java 7,您可以使用该语句为您处理所有结案

try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(defaultFile))) {
    oos.writeObject(obj);
} catch (IOException e) {
    e.printStackTrace();
}

如果您使用的是Java7,那么可以使用该语句为您处理所有关闭操作

try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(defaultFile))) {
    oos.writeObject(obj);
} catch (IOException e) {
    e.printStackTrace();
}

您可以在关闭流之前添加if条件,如下所示

if(stream != null) {
    stream.close();
}

您可以在关闭流之前添加if条件,如下所示

if(stream != null) {
    stream.close();
}

在try-catch语句中添加finally块,并在那里执行结束操作。要避免再次尝试捕获和空检查,您可以使用commons.io:


在try-catch语句中添加finally块,并在那里执行结束操作。要避免再次尝试捕获和空检查,您可以使用commons.io:


在哪里关闭流?@Ramy AI Zuhouri块退出时,try with resources语句为您关闭流。阅读我给你的链接。我在哪里关闭流?@Ramy AI Zuhouri在块退出时,try with resources语句为你关闭流。阅读我给你的链接。