2011-08-22 3 views
3

정상적인 zip 파일을 추출하려고하지만 계속 실패합니다.zip 파일을 압축 해제하면 "java.util.zip.ZipException : 버전을 읽을 수 없습니다."또는 "java.util.ZipException 로컬 헤더 버전 45를 읽을 수 없습니다."

private File downloadPath = new File(Environment.getExternalStorageDirectory() + "/Test/file.zip"); 
private File unzipLoc = new File(Environment.getExternalStorageDirectory() + "/Test/"); 
     FileInputStream fin = new FileInputStream(downloadPath); 
     ZipInputStream zin = new ZipInputStream(fin); 
     ZipEntry ze = null; 
     while ((ze = zin.getNextEntry()) != null) 
     { 
      FileOutputStream fout = new FileOutputStream(unzipLoc + ze.getName()); 
      for (int c = zin.read(); c != -1; c = zin.read()) 
      { 
       fout.write(c); 
      } 

      zin.closeEntry(); 
      fout.close(); 
     } 
     zin.close(); 

그것은 'zin.getNextEntry()'부분 실패 이것은 내가 지금 사용하고 내 코드입니다. 오류 : java.util.zip.ZipException : 버전을 읽을 수 없습니다 아이디어가 있습니까? 고마워!

+0

ZIP 파일이 유효하지 않은 것 같습니다. – SLaks

답변

5

귀하의 zip 파일이 귀하의 '압축 해제 라이브러리'보다 새로운 것 같습니다. 원본을 읽는다면

:

ZipInputStream 그것은는 zip 파일의 버전을 확인을 보여줍니다

(새로운 설정해 ZipException()를 "버전을 읽을 수 없습니다"에 대한 검색). 그런 다음 Wikipedia을 보면 우편 번호 추출에 필요한 최소 버전임을 알 수 있습니다.

은/다른 방법으로 당신이 같이 할 수없는 우편 라이브러리 (업데이트

을 테스트하기 위해 압축하지 않고 다시 압축하여 zip 파일을 확인하고 우편 소프트웨어의 낮은 버전으로 다시 저장하여 내부 안드로이드 우편 라이브러리 사용).

+0

이제 내 파일이 zip64 인 것으로 나타났습니다. 이 파일을 일반 zip 파일로 변환하려면 어떻게해야합니까? 아니면 안드로이드에서 그 파일을 읽는 방법? – FireWall

+1

zip64가 나에게도 실패한 이유였습니다. 안드로이드 용 Appcelerator에서 압축 모듈을 사용하고 있습니다. – Markive

+2

SharpZipLib을 사용하여 헤더 버전을 45로 설정하는 zip을 만들었습니다. ZipOutputStream.UseZip64 = UseZip64.Off . 그 후에 안드로이드에서 아무런 문제가 없습니다. –

4

위의 해결 방법을 문제의 해결 방법에 추가하면 문제가 발생하는 이유는 무엇입니까? 예 Bungle 씨와 Blundell 씨가 문제를 빨리 이해하고 해결할 수 있도록 도와 주신 데 대해 감사드립니다.

SDCard에서 파일을 압축 해제하는 동안 "java.util.ZipException Can not local header version 45"라는 예외가 발생했습니다. zip 파일은 DOT NET 서버에서 다운로드되었으며 서버는 SharpZipLib 라이브러리를 사용하여 파일의 압축을 풀었습니다. 예외적으로 지퍼 링 및 압축 해제 라이브러리에는 다른 버전이 있음을 분명히 의미합니다.

솔루션 :

은 기본적으로 SharpZipLib는 java.util.zip 패키지와 함께 안드로이드에서 자바로 볼 수 있습니다 호환되지 ZIP64 (파일을 압축하는 zip 파일 형식의 확장 형식)을 사용하여 라이브러리 전에 7 출시

파일을 압축하는 서버에서 Zip64를 전환하면 android java.util.zip 패키지와 호환되며 쉽게 압축이 해제됩니다. 서버에 다음 줄을 추가하면 문제가 해결됩니다.

ZipOutputStream.UseZip64 = UseZip64.Off 
+0

파일을 압축하는 방법을 제어 할 수 없다면 어떻게 될까요? 어떤 제안? – alpinescrambler

관련 문제