所以,我有一个读取文件数据的函数,在这种情况下是图像大小。但它完成后似乎没有正确释放文件。之后我无法移动这些文件。如果我不调用此函数一切正常,但如果我这样做,我总是得到“文件正在使用...等等等等等等”
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
答案 0 :(得分:0)
完成后关闭流应该有效(in.close()
)。操作系统可防止文件在使用时被更改,删除或移动。否则,流将搞砸。关闭流告诉操作系统您不再使用该文件。
答案 1 :(得分:0)
此流也应该关闭:
new FileInputStream(file.toString())