2016-10-18 3 views
1

ImageIO를 사용하여 JBIG2에서 JPEG로 파일을 변환하면 모든 것이 제대로 작동하지만 ImageIO가 생성하는 임시 파일은 삭제되지 않고 임시 폴더에 걸릴 수 있습니다. 예를 들어ImageIO 쓰레기 임시 파일은 작업이 완료된 후에 삭제되지 않습니다.

: imageio1278573787994972734.tmp

  • 이 작동하는 것입니다

캐시 나던 도움을 해제

  • 도움이되지 않습니다 이미지 리더에
  • 폐기 도움이되지 않습니다 GC를 실행 매우 열심히 그리고 나는 디스크 공간을 다 쓰고 싶지 않다.

    아이디어가 있으면 어떻게하면 임시 파일을 삭제할 수 있습니까?

    감사합니다. 제대로 읽기, 쓰기 후 자원을 처분하지 않는 경우

    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

    이 발생 : 여기

    는 코드입니다.

    이 폐기 전략 문제

    이 자바 구문을 없애 따르십시오.

    같은

    설명 추가 정보를 원하시면 방문 this blog에 대한 스칼라

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

    을 폐기