Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 如果我得到FileNotFoundException,是否应该关闭输出流?还有例外?_Java_Android_Memory Leaks - Fatal编程技术网

Java 如果我得到FileNotFoundException,是否应该关闭输出流?还有例外?

Java 如果我得到FileNotFoundException,是否应该关闭输出流?还有例外?,java,android,memory-leaks,Java,Android,Memory Leaks,我有以下代码: private void save(Bitmap bitmap) { try { FileOutputStream fos = new FileOutputStream(path); bitmap.compress(Bitmap.CompressFormat.JPEG, COMPRESSION_QUALITY, fos); fos.close(); } catch (Fi

我有以下代码:

   private void save(Bitmap bitmap) {
        try {
            FileOutputStream fos = new FileOutputStream(path);
            bitmap.compress(Bitmap.CompressFormat.JPEG, COMPRESSION_QUALITY, fos);
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
是否需要关闭
FileNotFoundException
catch块中的
FileOutputStream

若抛出该异常,则意味着无法打开该文件,所以我认为并没有必要这样做。然而,我认为在
IOException
catch块中执行它会很好

如果我不这样做,会不会导致内存泄漏错误或类似的情况


谢谢。

如果您使用的是Java 7或更高版本,您应该使用资源试用,并由系统决定

private void save(Bitmap bitmap) {
    try (FileOutputStream fos = new FileOutputStream(path)) {
        bitmap.compress(Bitmap.CompressFormat.JPEG, COMPRESSION_QUALITY, fos);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
如果不是,那么首先确保流不是
null
,最后在
中执行

private void save(Bitmap bitmap) {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(path);
        bitmap.compress(Bitmap.CompressFormat.JPEG, COMPRESSION_QUALITY, fos);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            fos.close();
        }
    }
}

完成读取或写入后,应始终关闭文件。否则,您将使资源处于繁忙状态,通常可能会出现问题。
如果您以这种方式修改代码,就不必关心关闭文件,java会考虑它

    private void save(Bitmap bitmap) {
       try(FileOutputStream fos = new FileOutputStream(path)) {
          bitmap.compress(Bitmap.CompressFormat.JPEG, COMPRESSION_QUALITY, fos);
       } catch (FileNotFoundException e) {
          e.printStackTrace();
       } catch (IOException e) {
          e.printStackTrace();
       }
    }

没有什么可关闭的。
FileOutputStream
构造函数引发异常;这条小河从未建造过;从未分配过
fos
变量;在
catch
块中,它超出范围。

在这种情况下,fos未打开,fos将为空。所以没有什么可关闭的。请重试。@greenapps非空,只是从未分配,并且超出了
catch
块的范围。您应该以
FileOutputStream fos=null开始当然在捕捉区之外..哦。。。那是你EJP。今天会是美好的一天。不要回答这个问题。如果出现
FileNotFoundException
,或任何关闭,则无法进行任何读写操作。