2011-12-19 31 views
2

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(); 

答えて

3

7Zipは幅広い種類のzip形式を開くことができ、比較的奇妙なことに耐えられます。 Windowsのダブルクリックでは、比較的特定の形式が必要となり、許容範囲がはるかに小さくなります。

zip formatを検索し、16進エディタ(16進エディタNeoなど)でファイル(および「良い」もの)を見て、何が間違っているかを確認する必要があります。

(一つの可能​​性は、あなたが間違った圧縮アルゴリズムを使用している。そして、あなたは「ディレクトリ」を生成、特にかどうか、なども考慮すべきいくつかの他のバリエーションがあるということです。)

2

それがいるかもしれませんcloseが見つかりませんzipのパスエンコーディングをWindowsで処理できない可能性があります。 Windowsがディレクトリ構造に問題があるか、パス名に(スラッシュ)が含まれている可能性があります。だから、違ったファイルを試して探偵の仕事です。直ちにzipをHTTPレスポンスにストリームする場合は、finishをi.oと呼びます。 close

+0

私が助けてくれるソースコードを投稿した後になる可能性があります –

+0

@КсенияШапошниковаようこそ;私は不思議です –

+0

ContentDispositionヘッダーのfileNameはパスなしで "file.zip"にする必要があります。あなたが知らない(圧縮されている)ので、Content-Lengthを与えてはいけません。 outZip.finoseをoutZip.finishに置き換える必要があります。 JEEサーバーがクローズします。 –