2015-01-26 7 views
3

나는 tar.gz 파일에서 정보를 얻을 소프트웨어를 개발 중이며 Apache commons-compress lib를 사용하고 있습니다. 그러나 나는 다음과 같은 오류 받고 있어요 : - x86_64.tar.gz 일식 --JEE - 루나 SR1 - 리눅스 - GTK 여기Apache Commons 압축 : .tar.gz 열기

Caused by: java.lang.IllegalArgumentException: Invalid byte 4 at offset 0 in 'O�!�C' len=8 
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctal(TarUtils.java:134) 
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctalOrBinary(TarUtils.java:166) 
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:953) 
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:940) 
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.<init>(TarArchiveEntry.java:324) 
at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:274) 
... 2 more 

사용되는 샘플 tar.gz 파일은이 클래스가된다 lib를 사용합니다 :

public class TarGzBuildAdapter extends BuildAdapter { 
    public TarGzBuildAdapter(File build) { 
     super(build); 
    } 

    @Override 
    public List<ArtifactInfo> getArtifactInfos() throws IOException { 
     TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(
       new FileInputStream(this.build)); 
     TarArchiveEntry tarArchiveEntry; 
     List<ArtifactInfo> artifactInfos = new LinkedList<ArtifactInfo>(); 

     while ((tarArchiveEntry = tarArchiveInputStream.getNextTarEntry()) != null) { 
      System.out.println(String.format("Name: %s LinkName: %s Size: %Ld RealSize: %Ld", 
        tarArchiveEntry.getName(), tarArchiveEntry.getLinkName(), 
        tarArchiveEntry.getSize(), tarArchiveEntry.getRealSize())); 
      artifactInfos.add(new ArtifactInfo(tarArchiveEntry.getName(), tarArchiveEntry 
        .getRealSize())); 
     } 

     tarArchiveInputStream.close(); 

     return artifactInfos; 
    } 
} 
+1

의미있는 대답을 얻으려면 commons-compress를 사용하여 작성한 코드를 제공해야합니다. – PaulProgrammer

+0

나는 아파치 코먼이 아닌 당신의 코드에 버그가 있다고 내기한다. – m0skit0

+0

아파치 공유의 어떤 버전이 lib를 압축 하는가? 1.3인가? – Sigismundus

답변

2

TAR이 아닌 GZ 스트림을 읽습니다. TarArchiveInputStream을 사용하려면 먼저 압축을 풀어야합니다.

tarArchiveInputStream = new TarArchiveInputStream(
          new GzipCompressorInputStream(
          new BufferedInputStream(
           new FileInputStream(fileName)))); 
+0

당신 말이 맞아요. 감사! –