在java中解压缩(解压缩)已被.net system.io.compression.gzipstream压缩的文件

时间:2016-11-16 11:33:21

标签: java .net gzip

我有一个使用system.io.compression.gzipstream库由.net应用程序压缩(zip)的文件。 我尝试在java中使用java.util.zip.GZIPInputStream解压缩(解压缩)它。 它扔了:

  

java.io.EOFException的       at 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.FileWriterTest.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();
    }
}

问题: - 当文件被.net应用程序压缩时,是否可以在java中解压缩文件? - 任何可以达到上述要求的zip库?

由于

1 个答案:

答案 0 :(得分: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();
}

}

在文件的末尾有一个空字符串,所以它抛出错误。我从我的同事那里得到了这个代码并且它有效。