2012-03-09 4 views
3

다른 tar 유틸리티 (예 : UNIX tar 명령)가 tar을 추출 할 수 있는지 확인하려면 Java에서 tar 파일의 유효성을 검사 할 수 있습니까? 코드에서이 작업을 수행하고 싶습니다. 내 응용 프로그램에서 실제로 tar -tf을 실행하고 리턴 코드를 기반으로보고해야합니다.Java : TAR 파일 유효성 확인

나는 아파치 commons 압축을 사용하여 tars 항목을 읽어 들여 압축을 풀지 않았습니다. "손상된"tar 파일을 나타내는 텍스트 편집기를 사용하여 일부 tar를 수동으로 수정했습니다. 커먼즈 압축은 내가 수정 한 내용에 상관없이 UNIX tar 명령이나 7zip이 일관되게 실패한 항목을 읽지 못하는 것은 아닙니다. 실제로 tar 파일이 손상되지 않았 음을 보장하기 위해 더 많은 작업이 필요하지만 실제로 무엇입니까?

참고 : 나는 유효성 검사의 수단으로 commons compress를 통해 타르를 추출하려고 실제로 시도하지 않았습니다. 나는 이것이 정말로 옵션이라고 생각하지 않는다. 필자가 작업해야하는 tar 파일 크기가 크고 (3 ~ 4 기가),이 프로세스가 이미 수행 한 것보다 오래 걸리는 것을 보지 않을 것입니다.

답변

0

tar 명령을 실행하고 싶지 않으므로 org.apache.tools.tar.TarInputStream 구현을 Apache ANT으로 사용할 수 있습니다.

Personality, 필자는이를 시도하지 않았고 TAR file format의 전문가는 아니지만 getNextEntry 메서드를 사용하여 TAR 파일을 반복 해 봅니다. 오류/예외없이 모든 작업을 완료하면 TAR 파일이 "유효"함을 (다소) 입증하게됩니다.

UPDATE는 : 실제로는 위키 백과 페이지 위에 그 자바 구현을 나열

Jtar 내가 추측 TAR 파일을 압축을 해제에 대한 예를 포함

  • JTar
  • , 수 아카이브를 단지 "테스트"하는 것으로 수정 될 수 있습니다.

    String tarFile = "c:/test/test.tar"; 
    
        // Create a TarInputStream 
        TarInputStream tis = new TarInputStream(new BufferedInputStream(new FileInputStream(tarFile))); 
        TarEntry entry; 
        while((entry = tis.getNextEntry()) != null) { 
    
         System.out.println(entry.getName()); 
    
         // The following might not be required, but arguably does 
         // additionally check the content of the archive. 
         int count; 
         byte data[] = new byte[2048]; 
    
         while((count = tis.read(data)) != -1) { 
         } 
        } 
    
        tis.close(); 
    
  • 관련 문제