未在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?否则,操作系统无法判断您是否已处理完该文件。