Создание 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>