web-dev-qa-db-ja.com

メモリにZipファイルを作成する

ファイル(たとえばfoo.csv)をZip圧縮してサーバーにアップロードしようとしています。ローカルコピーを作成してからローカルコピーを削除する作業バージョンがあります。ファイルを圧縮してハードドライブに書き込むことなく送信し、純粋にメモリ内で実行できるようにするにはどうすればよいですか?

ByteArrayOutputStream with ZipOutputStream タスクを完了します。

ZipEntry を使用して、Zipファイルに含めるファイルを指定できます。

上記のクラスの使用例は次のとおりです。

String s = "hello world";

ByteArrayOutputStream baos = new ByteArrayOutputStream();
try(ZipOutputStream zos = new ZipOutputStream(baos)) {

  /* File is not on the disk, test.txt indicates
     only the file name to be put into the Zip */
  ZipEntry entry = new ZipEntry("test.txt"); 

  zos.putNextEntry(entry);
  zos.write(s.getBytes());
  zos.closeEntry();

  /* use more Entries to add more files
     and use closeEntry() to close each file entry */

  } catch(IOException ioe) {
    ioe.printStackTrace();
  }

baosにはZipファイルがstreamとして含まれています

Java SE 7で導入されたNIO.2 APIが、カスタムファイルシステムをサポートしているため、 https://github.com/marschall/memoryfilesystem およびOracleが提供するZipファイルシステム。

注:Zipファイルシステムで動作するユーティリティクラスをいくつか作成しました。

ライブラリはオープンソースであり、開始するのに役立つ場合があります。

チュートリアルは次のとおりです。 http://softsmithy.sourceforge.net/lib/0.4/docs/tutorial/nio-file/index.html

ここからライブラリをダウンロードできます。 http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.4/

またはMavenの場合:

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>softsmithy-lib-core</artifactId>  
    <version>0.4</version>   
</dependency>  
3
Puce