2012-10-29 4 views
7

私は(FTPサーバから取得した)ファイルを解凍しようとしています:ファイルジップ例外解凍:(193144を期待したが193138バイトだ)無効なエントリのサイズを

ZipInputStream zis = new ZipInputStream(
    new FileInputStream(zipFile)); 
    ZipEntry ze = zis.getNextEntry(); 
    while (ze != null) { 
     String fileName = ze.getName(); 
     File newFile = new File(outputFileName+outputFolder + File.separator + fileName); 
     System.out.println("file unzip : " + newFile.getAbsoluteFile()); 
     FileOutputStream fos = new FileOutputStream(newFile); 
     int len; 
     while ((len = zis.read(buffer)) > 0) { 
      fos.write(buffer, 0, len); 
     } 
     fos.close(); 
     sendFile = newFile; 
     ze = zis.getNextEntry(); 
    } 
    zis.closeEntry(); 
    zis.close(); 
    System.out.println("Done"); 

私が唯一の1つのテキストファイルを持っています。 ZIPファイル。このコードはローカルのWindowsマシンで正常に動作します。 com.empress.Xsync.updater.ClientConfiguration.unZipFile(ClientConfiguration.java:246)

でしかし、Ubuntuのサーバにデプロイするとき、それは次の例外がスローされます。..

java.util.zip.ZipException: invalid entry size (expected 193144 but got 193138 bytes) 
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:386) 
at java.util.zip.ZipInputStream.read(ZipInputStream.java:156) 
at java.io.FilterInputStream.read(FilterInputStream.java:90) 

私はそれを手動で解凍しました..正常に動作します。 オリジナルの.txtファイルサイズは193144バイトです。

+0

これはおそらく問題とは関係ありませんが、 'InputStream.read(...)'はEOFで '-1'を返し、' 0 'エラーなしで、'> = 0'や '!= -1'ではなく'> = -1'をチェックする必要があります。 –

+0

それも試してみました..問題を解決できませんでした! – simpleJack

答えて

9

あなたのzipファイルがUbuntuマシンに転送される過程で壊れているようです。 Ubuntuマシンのコマンドラインから同じファイルを解凍して、問題が報告されているかどうか確認してください。

ランダムな推測をする場合は、FTP経由でZIPファイルを転送し、「バイナリ」モードではなく「ascii」モードを使用したとします。 (FTPは'\r\n''\n'に6回変換している可能性があります)

+0

ブルズアイ!ステファン、どうもありがとうございました。 – simpleJack