Java 圧縮 API (java.util.ZIP パッケージ) を使用してファイルを圧縮しています。それはうまくいきます。ただし、以下の小さな問題があります。
入力ファイルがC:\temp\text.txt
で、出力 (圧縮) ファイルがC:\temp\text.zip
WinZip を使用して圧縮ファイル (text.zip) を表示すると、内部フォルダー構造が正しく表示されます。と表示されtemp\text.txt
ます。ただし、同じファイルを 7Zip で開くと (右クリック -> 7Zip -> [アーカイブを開く] オプションを使用)、 の後に空のフォルダーが表示されC:\temp\text.zip\
ます。を表示するには、7Zip アドレス バーtext.txt
に入力する必要があります。C:\temp\text.zip\\\temp\
ここで二重のバックスラッシュに注意して\\\
ください。
以下は私のコードです:
String input="C:\temp\text.txt";
String output="C:\temp\text.zip";
FileOutputStream dest = new FileOutputStream(output);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
out.setMethod(ZipOutputStream.DEFLATED); //Entries can be added to a ZIP file in a compressed (DEFLATED) form
out.setLevel(this.getZIPLevel(Deflater.DEFAULT_COMPRESSION));
File file = new File(input);
final int BUFFER = 2048;
byte data[] = new byte[BUFFER];
BufferedInputStream origin = null;
FileInputStream fi;
fi = new FileInputStream(file);
origin = new BufferedInputStream(fi, BUFFER);
int index = file.getAbsolutePath().indexOf(":") + 1;
String relativePath = file.getPath().substring(index);
ZipEntry entry = new ZipEntry(relativePath);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
out.close();
7Zip を使用して追加の空のフォルダーが表示される理由を誰か教えてもらえますか? 私はJDK7を使用しています。