Java を使用して zip ファイルを扱うのはまったく初めてで、奇妙な状況に遭遇しました。
解凍に使用している方法は次のとおりです。
public void unzip(File zipFile, File rootDir) throws IOException
{
ZipFile zip = new ZipFile(zipFile);
Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zip.entries();
while(entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
java.io.File f = new java.io.File(rootDir, entry.getName());
if (entry.isDirectory()) { // if its a directory, create it
continue;
}
if (!f.exists()) {
f.getParentFile().mkdirs();
f.createNewFile();
}
/*BufferedInputStream bis = new BufferedInputStream(zip.getInputStream(entry)); // get the input stream
BufferedOutputStream bos = new BufferedOutputStream(new java.io.FileOutputStream(f));
while (bis.available() > 0) { // write contents of 'is' to 'fos'
bos.write(bis.read());
}
bos.close();
bis.close();*/
InputStream is = zip.getInputStream(entry);
OutputStream os = new java.io.FileOutputStream(f);
byte[] buf = new byte[4096];
int r ;
while ((r = is.read(buf)) != -1) {
os.write(buf, 0, r);
}
os.close();
is.close();
}
}
ただし、IOException がスローされ、メッセージは次のとおりです。
情報 | jvm 1 | 2012/11/30 01:58:05 | java.util.zip.ZipException: zip ファイルを開く際のエラー
情報 | jvm 1 | 2012/11/30 01:58:05 | java.util.zip.ZipFile.open(ネイティブメソッド)
情報 | jvm 1 | 2012/11/30 01:58:05 | java.util.zip.ZipFile.(ZipFile.java:127) で
情報 | jvm 1 | 2012/11/30 01:58:05 | java.util.zip.ZipFile.(ZipFile.java:143) で
誰かがこれについて私を助けることができますか?
どうもありがとう。
アップデート:
Linux をテスト環境として使用しています。解凍ディレクトリのパーミッションは drwxr-xr-x –</p>
更新 02:
@heikkim からの提案を採用することにより、
ファイルを手動で解凍しようとして、Linuxでunzipコマンドを使用しようとしました。次のメッセージがあります。
アーカイブ: TMA_Template.zip 注意: zipfile コメントが切り捨てられた警告 [TMA_Template.zip]: zipfile はマルチパート アーカイブの最後のディスクであると主張しています。すべてのパーツが順番に連結されていると仮定して、とにかく処理を試みます。「エラー」と警告が発生することを期待してください...真のマルチパート サポートはまだ存在しません (近日公開予定)。エラー [TMA_Template.zip]: zipfile に 6366880279 バイトがありません (とにかく処理しようとしています) エラー [TMA_Template.zip]: zipfile の先頭より前にシークしようとしています (適切な BINARY モードで zipfile を転送または作成したことを確認してください) UnZip を適切にコンパイルしている)