2017-03-31 3 views
0

リクエスト用に複数のzipファイルを1つのzipファイルとしてダウンロードしたいと考えています。 C、https://test12.zipなどのzipファイルパスがあります。これらのファイルを1つのzipファイルとしてダウンロードするにはどうすればよいですか。私はこれをしばらく検索してきました。私が持っているのは、複数のファイル(ローカル)をダウンロードし、それらを圧縮する例です。これは私が1つのファイルをダウンロードしようとしたものです。複数のファイルの場合、動作しません。URLから複数のファイルを1つのzipファイルとしてダウンロードする方法

URL url = new URL("https://test12.zip"); 
URLConnection connection = url.openConnection(); 
InputStream stream = connection.getInputStream(); 
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream()); 

     int len; 
     byte[] buf = new byte[1024]; 
     while ((len = stream.read(buf)) > 0) { 
      outs.write(buf, 0, len); 
     } 
     outs.close(); 

ご協力いただければ幸いです。

+0

は、あなただけのすべてのファイルをダウンロードし、それらを抽出し、それらのうち、大きなzipファイルを作ることができない。

方法の例を参照ZipInputStreamを使用するには? –

+0

'https:// test12.zip'は無効です。あなたの質問は不明です。あなたは 'a.zip'と' b.zip'を 'ab.zip'のような単一のファイルとしてダウンロードするように求めていますか?あなたはそれをすることはできません。あなたは存在しないものをダウンロードすることはできません。サーバーには、すべての内容を含む既存のzipファイルが必要です。個別にダウンロードして1つのアーカイブにまとめる必要があります。 –

答えて

0

ZIPファイルは、圧縮されたファイルエントリ(ファイル名、属性、およびデータ)から成ります。ファイルの最後に、すべてのエントリのリストを含む中央ディレクトリがあります。

したがって、zipファイルを直接結合または連結することはできません。 Javaでは、ダウンロードしたzipファイルを(ファイルシステムに保存することなく)オンザフライで解凍することができます。また、圧縮されたコンテンツを使用して新しいZIPファイルを作成するだけです。

最初にZipOutputStreamを作成しますあなたが作成したいzipファイルのために。

次に、ダウンロードごとにInputStreamを使用し、ZipInputStreamと一緒に使用します。 ZipInputStreamのすべてのエントリを繰り返し、各エントリに対してZipOutputStreamに新しい同一のエントリを作成し、ZipInputStreamのコンテンツをZipOutputStreamにコピーします。 https://stackoverflow.com/a/36648504/150978

+0

回答ありがとうございます。私はこれを試してみる。 – sparrow

関連する問題