2013-04-05 3 views
0

압축 파일을 추출하는 방법을 찾고 있습니다. 지금까지 나는 java.util.zip과 org.apache.commons.compress를 시도했지만, 둘 다 손상된 출력을 주었다.java 압축 해제 Zip 파일

기본적으로 입력은 하나의 .doc 파일을 포함하는 ZIP 파일입니다.

java.util.zip : 출력이 손상되었습니다. org.apache.commons.compress : 공백 파일을 출력하지만 크기는 2MB입니다.

지금까지 Winrar와 같은 상용 소프트웨어 만 완벽하게 작동합니다. 거기에 이것을 사용하는 자바 라이브러리가 있습니까?

이것은 java.util의 라이브러리를 사용하여 내 방법 :

public void extractZipNative(File fileZip) 
{ 
    ZipInputStream zis; 
    StringBuilder sb; 
    try { 
     zis = new ZipInputStream(new FileInputStream(fileZip)); 
     ZipEntry ze = zis.getNextEntry(); 

     byte[] buffer = new byte[(int) ze.getSize()]; 

     FileOutputStream fos = new FileOutputStream(this.tempFolderPath+ze.getName()); 

     int len; 
     while ((len=zis.read(buffer))>0) 
     { 
      fos.write(buffer); 
     } 
     fos.flush(); 
     fos.close(); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } finally 
    { 
     if (zis!=null) 
     { 
      try { zis.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

}

많은 감사, 마이크를

나는 당신의 입력이 일부 "호환되지 않는"우편 프로그램 등으로 압축 할 수있다 생각
+3

Zip 파일이 아닐 수도 있습니다. – MadProgrammer

답변

1

내 코드에서 오류입니다. 나는 바이트의 오프셋과 len을 지정해야한다.

+0

당신은 당신의 대답으로 표시 할 수 있습니다. –

2

7zip. 클래식 WinZip 등으로 포장을 풀 수 있는지 먼저 조사하십시오.

Javas zip 처리는 "호환"zip 압축기에서 가져온 압축 아카이브를 처리 할 수 ​​있습니다.

+0

추출에 사용 된 코드를 추가합니다. 그것은 모두 내 Java 메소드 afterall로 내려갈 수 있습니다. – MikeNQ

0

jUnrar를 사용해 보셨습니까? 아마도 작동 할 수도 있습니다 : https://github.com/edmund-wagner/junrar

그래도 작동하지 않으면 내 생각 엔 아카이브가 손상된 것 같습니다.

+0

Winrar 추출 작업. 나는 당신의 제안을 시도해 주겠다, 감사합니다 – MikeNQ

0

이 코드를 실행하는 환경을 알고 있다면 시스템을 호출하여 압축을 풀어주는 것이 좋습니다. 그것은 당신이 자바에서 구현하는 것보다 훨씬 빠를 것입니다.

중첩 된 디렉토리가있는 zip 파일을 추출하는 코드를 작성했으며 천천히 실행되어 많은 CPU를 사용했습니다. 나는 이것으로 바꾸었다.

Runtime.getRuntime().exec(String.format("unzip %s -d %s", archive.getAbsolutePath(), basePath)); 

그것은 훨씬 잘 작동한다.