解压缩(解压缩)由.net压缩(解压缩)的文件.net system.io.compression.gzipstream

问题描述:

我有一个使用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

我使用这段代码,它解决了我的问题。

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(); 
} 

}

在文件的最后有一个空字符串,所以它抛出错误。我从我的同事那里得到这个代码,它工作。