我正在使用ImageIO将文件从JBIG2转换为JPEG,一切正常但ImageIO创建的临时文件没有被删除,并且卡在临时文件夹中。
例如:imageio1278573787994972734.tmp
这将非常有效,我不想耗尽磁盘空间。
任何想法如何让他在完成后删除这些临时文件?
感谢。
以下是代码:
def convertJBig2ToJpeg(j2bigFile: File) : Try[File] = Try { import java.io._ import net.java.truecommons.shed.ResourceLoan._ loan (new FileInputStream(j2bigFile)) to { inputStream => val disf = new DefaultInputStreamFactory() val imageInputStream = disf.getInputStream(inputStream) val imageReader = new JBIG2ImageReader(new JBIG2ImageReaderSpi()) imageReader.setInput(imageInputStream) val param = imageReader.getDefaultReadParam val bufferedImage = imageReader.read(0, param) val newFilePath = j2bigFile.getParent + "/" + j2bigFile.getName.split('.')(0) + "." + MimeType.postfixValue(JPG) val newFile = new File(newFilePath) try { ImageIO.write(bufferedImage, MimeType.postfixValue(JPG), newFile) }catch { case e: Throwable => Files.deleteIfExists(newFile.toPath) throw e } newFile }}
答案 0 :(得分:0)
如果您在阅读和写作后没有正确处理资源,就会发生这种情况。
遵循此处置策略以解决问题
这是Java语法。
处理读者
if(imageReader.getInput() != null && imageReader.getInput() instanceof ImageInputStream)
((ImageInputStream)imageReader.getInput()).close();
imageReader.dispose();
处置作家
try {
imageWriter.setOutput(out);
imageWriter.write(null, new IIOImage(image, null, null), iwp);
out.flush();
} catch(IOException e) {
imageWriter.abort();
throw e;
} finally {
try {
out.close();
} catch(Exception inner) {
}
imageWriter.dispose();
}
Scala中的代码
try {
imageWriter.setOutput(out)
imageWriter.write(null, new IIOImage(image, null, null), iwp)
out.flush()
} catch {
case e: IOException =>
imageWriter.abort()
throw e
case _ => if (imageWriter != null) imageWriter.abort()
} finally {
try {
out.close()
} catch {
case _ =>
}
imageWriter.dispose()
}
有关详细信息,请访问this blog,其解释相同