私はzipファイルを抽出するための簡単なコードを持っています。それは期待通りにうまく機能していましたが、テスト中に、zipファイルを抽出する必要があることを確認するために、いくつかのzipファイル(インターネットからダウンロードしたフォント、アイコン、およびテンプレート)でコードを試しました提供されていますが、一部の zip ファイルでは機能しません。この問題を再現するための最小化されたコードを次に示します。
package com.test.mytest;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ZipExtractTest {
public static final String ZIP_FILE = "/Users/XXXXX/Downloads/janne.zip";
public static void main(String[]args) {
unzipFile(ZIP_FILE);
unzipStream(ZIP_FILE);
}
public static void unzipFile(String zipName) {
try {
ZipFile zf = new ZipFile(zipName);
Enumeration ent = zf.entries();
while(ent.hasMoreElements()) {
System.out.println(ent.nextElement());
}
} catch(Exception e) {
System.out.println(e);
}
}
public static void unzipStream(String zipName) {
try {
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipName));
ZipEntry ze = zis.getNextEntry();
if(ze == null) {
System.out.println("unable to get first entry from zip file");
zis.close();
return;
}
while(ze != null) {
System.out.println("Entry Found: " + ze);
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
} catch(Exception e) {
System.out.println(e);
}
}
}
実際、実際のアプリケーションでは、入力ストリームを介して zip ファイルを抽出する必要があります。上記のコードでは、「janne.zip」を抽出しようとしていますhttp://www.iconian.com/fonts/janne.zipからこのファイルをダウンロードしました。任意の zip ツールを使用して、驚くべきことに「unzipFile」を使用して抽出できます。 (String zipName)" メソッドも同様ですが、unzipStream(String zipName) メソッドを使用します。
ZipEntry ze = zis.getNextEntry();
null を返します
任意の助けをいただければ幸いです