java.util.zip。*で奇妙な動作が発生しています
私はzipファイルを持っており、解凍すると次のタイミングが発生します
ZipFile zipfile = new ZipFile(file, ZipFile.OPEN_READ);
これはexaxtエラーメッセージです
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.zip.ZipFile.<init>(ZipFile.java:143)
at com.basware.ExtractZip.unpack(ExtractZip.java:27)
at com.basware.ExtractZip.main(ExtractZip.java:17)
しかし、次のコードを使用すると、エラーなしでアーカイブを開くことができます
try {
BufferedOutputStream dest = null;
File file = new File("File_Path");
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
// write the files to the disk
FileOutputStream fos = new
FileOutputStream(entry.getName());
dest = new
BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER))
!= -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
}
zis.close();
ファイルはWinZIPを使用して圧縮されることに注意してください。
私の質問は、ZipFileとZipInputStreamがほぼ同じであるため、ZipFileが例外を発生させる理由と、解凍を実行できない理由です。
編集:問題は、WinZipツールを使用してファイルを圧縮し、リストされたプログラムを使用して解凍すると正常に動作することですが、この問題は特に外部ソースからのアーカイブで発生します(外部ソースはWinZipを使用していると主張しています)。その上、WinZipツールを使用してまったく同じアーカイブ(外部アーカイブ)を開くと、ファイルが表示および解凍されますが、このJAVA固有のコード(ZipFile)はまったく機能しません。
編集:JavaネイティブコードがZIPアーカイブで機能しない理由を理解できませんが、apachecompressが問題を解決しました。IanRobertsが提案したように機能しています。