Java 关闭BuffereImage以便删除它?

Java 关闭BuffereImage以便删除它?,java,Java,我使用ImageIO.read(File File)函数打开了一个图像,它返回了BufferedImage。我从图像中读取像素,现在我想从文件系统中删除它。问题是file.delete()返回false。调用Files.delete(file.toPath())会引发异常: java.nio.file.FileSystemException: C:\<file_location>\1517053169520.png: The process cannot access the fil

我使用
ImageIO.read(File File)
函数打开了一个图像,它返回了
BufferedImage
。我从图像中读取像素,现在我想从文件系统中删除它。问题是
file.delete()
返回
false
。调用
Files.delete(file.toPath())
会引发异常:

java.nio.file.FileSystemException: C:\<file_location>\1517053169520.png: The process cannot access the file because it is being used by another process.
因此,我的问题是:如何释放该文件,以便将其删除?

有一个问题。以下代码段应通过释放流来解决此问题:

BufferedImage image = null;
InputStream stream = null;
try {
    stream = new FileInputStream(file);
    image = ImageIO.read(stream);

} catch (Exception ex) {
    log.error("Image could not be read: "+file);

} finally {
    if (stream != null) {
        try {
            stream.close();
        } catch (IOException ex) {
            log.error("ERROR closing image input stream: "+ex.getMessage(), ex);
        }
    }
}
有一次。以下代码段应通过释放流来解决此问题:

BufferedImage image = null;
InputStream stream = null;
try {
    stream = new FileInputStream(file);
    image = ImageIO.read(stream);

} catch (Exception ex) {
    log.error("Image could not be read: "+file);

} finally {
    if (stream != null) {
        try {
            stream.close();
        } catch (IOException ex) {
            log.error("ERROR closing image input stream: "+ex.getMessage(), ex);
        }
    }
}

@KEC展示了用过时的构造实现的好主意。从Java7开始,您可以使用它将上面的代码(下面,谁知道呢)简化为:


当然,您可以决定捕获异常,或者让它向外抛出。

@kekec展示了使用过时构造实现的好主意。从Java7开始,您可以使用它将上面的代码(下面,谁知道呢)简化为:


当然,您可以决定捕获异常,或者让它向外抛出。

对不起,我想简化代码,但我也忘了编辑它。它应该是
文件
。我已经编辑了这个问题。对不起,我想简化代码,但我也忘了编辑。它应该是
文件
。我已经编辑了这个问题。
BufferedImage image = null;
try(FileInputStream stream = new FileInputStream(file)){
    image = ImageIO.read(stream);
}