未在java中释放资源

未在java中释放资源,java,resources,Java,Resources,所以,我有一个函数,可以读取文件数据,在这个例子中是图像大小。但完成后,它似乎没有正确地释放文件。以后我无法移动这些文件。如果我不调用这个函数,一切都会工作,但如果我调用了,我总是使用这个文件。。废话废话 private void setMoveType() { ImageInputStream in = null; try { in = ImageIO.createImageInputStream(new FileInputStream(file.toStrin

所以,我有一个函数,可以读取文件数据,在这个例子中是图像大小。但完成后,它似乎没有正确地释放文件。以后我无法移动这些文件。如果我不调用这个函数,一切都会工作,但如果我调用了,我总是使用这个文件。。废话废话

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:文件输入流未关闭

完成后关闭流应在.close中工作。操作系统可防止文件在使用过程中被更改、删除或移动。否则,流会被弄乱。关闭流表示操作系统不再使用该文件。

此流也应关闭:

new FileInputStream(file.toString())

使用这个语句。@Tom也不走运。因为某种原因,它不会这么做。经过一点测试,我确定是ImageInputStream没有正确关闭。您是否在代码末尾调用了in.close?否则,操作系统无法判断您是否已处理完该文件。