2016-11-16 5 views
0

У меня есть файл, который был сжат (zip) приложением .net с использованием библиотеки system.io.compression.gzipstream. Я попытался распаковать (разархивировать) его, используя java.util.zip.GZIPInputStream в java. он бросил:распаковать (распаковать) файл в java, сжатый .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) at java.io.FilterInputStream.read (FilterInputStream.java:90) at juwdemoproj.FileWriterTest.gunzipIt (FileWriterTest.java:353) at 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-библиотека, которая может достичь вышеуказанного требования?

Thanks

+0

ZIP и GZip - два разных и несовместимых формата. Я предлагаю вам открыть .zip как ZIP, а не как .gz-файл. –

+1

@PeterLawrey Ну, OP сказал, что он был сжат с использованием 'gzipstream' .NET, так что может быть просто, что расширение файла неверно. В любом случае, OP, похоже, запутывает Zip vs GZip, поскольку zipped-файл должен иметь расширение '.zip', а файл gzipped должен иметь расширение' .gz'. – Andreas

+0

привет @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(); 
} 

}

в конце файла есть пустая строка, поэтому он бросает ошибку. Я получаю этот код от своего коллеги, и он работает.

Смежные вопросы