Создание Zip файла в памяти

Я пытаюсь закрепить файл (например, foo.csv) и загрузить его на сервер. У меня есть рабочая версия, которая создает локальную копию, а затем удаляет локальную копию. Как бы я застегнул файл, чтобы я мог отправить его без записи на жесткий диск и сделать это исключительно в памяти?

Ответы

Ответ 1

Используйте ByteArrayOutputStream с 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

Ответ 2

Поскольку API NIO.2, который был представлен в Java SE 7, поддерживает пользовательские файловые системы, вы можете попытаться объединить файловую систему в памяти, например https://github.com/marschall/memoryfilesystem и файловой системы Zip, предоставляемой Oracle.

Примечание. Я написал некоторые служебные классы для работы с файловой системой Zip.

Библиотека - это Open Source, и это может помочь вам начать работу.

Вот учебник: 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>