在内存中创建 Zip 文件

新手上路,请多包涵

我正在尝试压缩文件(例如 foo.csv)并将其上传到服务器。我有一个工作版本,它创建一个本地副本,然后删除本地副本。我将如何压缩一个文件,这样我就可以在不写入硬盘驱动器的情况下发送它,并且完全在内存中完成?

原文由 Sleep Deprived Bulbasaur 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 851
2 个回答

使用 ByteArrayOutputStreamZipOutputStream 来完成任务。

您可以使用 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

原文由 Thirumalai Parthasarathi 发布,翻译遵循 CC BY-SA 4.0 许可协议

由于 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>

原文由 Puce 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题