ZipOutputStreamを使用してサーバーからフォルダにファイルを圧縮しようとしています。 アーカイブのダウンロード後、ダブルクリックしても開くことはできません。エラー "圧縮された(圧縮された)フォルダが無効です"というエラーが発生しました。しかし、私はコンテキストメニューから開く - > 7zip - >開いているファイルを正常に動作します。問題の原因は何か?圧縮された(圧縮された)フォルダが無効ですJava
sourceFileName="./file.txt"'
sourceFile = new File(sourceFileName);
try {
// set the content type and the filename
responce.setContentType("application/zip");
response.addHeader("Content-Disposition", "attachment; filename=" + sourceFileName + ".zip");
responce.setContentLength((int) sourceFile.length());
// get a ZipOutputStream, so we can zip our files together
ZipOutputStream outZip = new ZipOutputStream((responce.getOutputStream());
// Add ZIP entry to output stream.
outZip.putNextEntry(new ZipEntry(sourceFile.getName()));
int length = 0;
byte[] bbuf = new byte[(int) sourceFile.length()];
DataInputStream in = new DataInputStream(new FileInputStream(sourceFile));
while ((in != null) && ((length = in.read(bbuf)) != -1)) {
outZip.write(bbuf, 0, length);
}
outZip.closeEntry();
in.close();
outZip.flush();
outZip.close();
私が助けてくれるソースコードを投稿した後になる可能性があります –
@КсенияШапошниковаようこそ;私は不思議です –
ContentDispositionヘッダーのfileNameはパスなしで "file.zip"にする必要があります。あなたが知らない(圧縮されている)ので、Content-Lengthを与えてはいけません。 outZip.finoseをoutZip.finishに置き換える必要があります。 JEEサーバーがクローズします。 –