资源没有在java中发布

时间:2014-11-16 01:09:52

标签: java resources

所以,我有一个读取文件数据的函数,在这种情况下是图像大小。但它完成后似乎没有正确释放文件。之后我无法移动这些文件。如果我不调用此函数一切正常,但如果我这样做,我总是得到“文件正在使用...等等等等等等”

private void setMoveType() {
    ImageInputStream in = null;
    try {
        in = ImageIO.createImageInputStream(new FileInputStream(file.toString()));
        try {
            final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
            if(readers.hasNext()) {
                ImageReader reader = readers.next();
                try {
                    reader.setInput(in);
                    try {
                        moveType = Helper.getMoveType(new Dimension(reader.getWidth(0), reader.getHeight(0)));
                    } catch (IOException e) {
                        System.err.println("IOException: " + e.getMessage());
                        return;
                    }
                } catch(Exception e) {
                    System.err.println("ReaderException: " + e.getMessage());
                } finally {
                    reader.dispose();
                }
            }
        } catch(Exception e) {
            System.err.println("MoveTypeSetException: " + e.getMessage());
        }
    } catch (IOException e) {
        System.err.print("IOException: failure while creating image input stream");
        System.err.println(" -> createImageInputStream Error for file: " + file.getFileName());
        return;
    } finally {
        if(in != null) {
            try {
                in.close();
            } catch (IOException e) {
                System.err.println("IOException: " + e.getMessage());
                return;
            }
        }
    }
}

编辑:ImageInputStream未正确关闭

EDIT2:未关闭FileInputStream

2 个答案:

答案 0 :(得分:0)

完成后关闭流应该有效(in.close())。操作系统可防止文件在使用时被更改,删除或移动。否则,流将搞砸。关闭流告诉操作系统您不再使用该文件。

答案 1 :(得分:0)

此流也应该关闭:

new FileInputStream(file.toString())