2016-11-16 248 views
0

我有一個使用system.io.compression.gzipstream庫的.net應用程序壓縮(zip)的文件。 我試圖在java中使用java.util.zip.GZIPInputStream進行解壓縮(解壓縮)。 扔:解壓縮(解壓縮)由.net壓縮(解壓縮)的文件.net system.io.compression.gzipstream

java.io.EOFException的 在java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:246) 在java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:237 ) 在java.util.zip.GZIPInputStream.readUInt(GZIPInputStream.java:229) 在java.util.zip.GZIPInputStream.readTrailer(GZIPInputStream.java:197) 在java.util.zip.GZIPInputStream.read(GZIPInputStream的.java:92) 在java.io.FilterInputStream.read(FilterInputStream.java:90) 在juwdemoproj.FileWriterTest.gunzipIt(FileWriterTest.java:353) 在juwdemoproj.FileWriterTes t.main(FileWriterTest.java:51)

我的示例代碼:

public static void gunzipIt() { 
    byte[] buffer = new byte[1024]; 

    String zipFilePath = "C:\\Juw\\JR\\file\\output\\020030214112016.zip"; 
    String destDirectory = "C:\\Juw\\JR\\file\\output\\targetUnzip"; 

    try { 
     GZIPInputStream gzis = 
      new GZIPInputStream(new FileInputStream(zipFilePath)); 

     FileOutputStream out = new FileOutputStream(destDirectory); 

     int len; 
     while ((len = gzis.read(buffer)) > 0) { 
      out.write(buffer, 0, len); 
     } 

     gzis.close(); 
     out.close(); 

     System.out.println("Done"); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 

問: - 是否有可能在解壓的java文件,當文件是由.NET壓縮應用? - 任何可以達到上述要求的zip庫?

謝謝

+0

ZIP和GZip是兩種不同和不兼容的格式。我建議你打開.zip作爲ZIP而不是.gz文件。 –

+1

@PeterLawrey嗯,OP確實說它是使用.NET的'gzipstream'壓縮的,所以它可能只是文件擴展名是錯誤的。無論哪種方式,OP似乎混淆了Zip與GZip,因爲壓縮文件應具有'.zip'文件擴展名,並且gzip文件應該具有'.gz'文件擴展名。 – Andreas

+0

hi @PeterLawrey,是的我的客戶端將它保存爲.zip文件擴展名,但他們使用gzipstream庫。我可以在他們的代碼中看到它。 – cumibulat

回答

0

我使用這段代碼,它解決了我的問題。

public void gunzipIt(){ 

byte[] buffer = new byte[1024]; 
boolean isValid = true; 

try{ 

    GZIPInputStream gzis = 
     new GZIPInputStream(new FileInputStream(INPUT_GZIP_FILE)); 

    FileOutputStream out = 
     new FileOutputStream(OUTPUT_FILE); 

    while (isValid) { 

     int len; 

     try{ 
      len = gzis.read(buffer); 
     }catch(Exception ex){ 
      len = 0; 
      isValid = false; 
     } 

     if (len > 0) { 
      out.write(buffer, 0, len); 
     }else{ 

      isValid = false; 
     } 
    } 

    gzis.close(); 
    out.close(); 

    System.out.println("Done"); 

}catch(IOException ex){ 
    ex.printStackTrace(); 
} 

}

在文件的最後有一個空字符串,所以它拋出錯誤。我從我的同事那裏得到這個代碼,它工作。