2016-10-18 12 views
1

ImageIOを使用してJBIG2からJPEGに変換すると、すべて正常に動作しますが、ImageIOが作成する一時ファイルは削除されず、例えば作業完了後にImageIOガーベッジ・テンポラリファイルが削除されない

imageio1278573787994972734.tmp GCは、画像読取装置に

  • 処分が
  • これは仕事に行くされて助けるdoesntのキャッシュを無効にすることを

  • を助けない助けていない実行

    • 非常に難しく、私はディスクスペースを使い果たしたくありません。

      どのように彼は一度、これらの一時ファイルを削除するようにするには?

      ありがとうございました。ここで

      は、コードは次のとおりです。

      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

    あなたが読んで書いた後、適切なリソースを配置していない場合に、この問題が発生しました。

    これはJava構文で問題

    を取り除くために、この処分の戦略に従ってください。

    同じ

    を説明してより多くの情報訪問 this blogのための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() 
    } 
    

    に処分ライターリーダー

    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(); 
    } 
    

    を配置