Java 在内存中创建ZIP文件
我需要创建一个ZIP文件,该文件由动态创建的文件组成,并且在文件系统上没有持久性 例如:我想在内存中创建一个SQLite数据库,在用数据填充它之后,我想将它添加到一个尚未存在的ZIP文件中,然后我想将这个ZIP文件实际写入文件系统 我发现了几种从文件系统读取文件的方法,这些文件将成为归档文件的内容 有没有办法把我想做的事情存档?我希望Java 在内存中创建ZIP文件,java,zip,Java,Zip,我需要创建一个ZIP文件,该文件由动态创建的文件组成,并且在文件系统上没有持久性 例如:我想在内存中创建一个SQLite数据库,在用数据填充它之后,我想将它添加到一个尚未存在的ZIP文件中,然后我想将这个ZIP文件实际写入文件系统 我发现了几种从文件系统读取文件的方法,这些文件将成为归档文件的内容 有没有办法把我想做的事情存档?我希望压缩commons能对我有所帮助,但显然没有 我遗漏了什么吗?如果您试图压缩的内存中对象是可序列化的,那么这很容易 您可以获取任何可序列化实例,并将其转换为字节[]
压缩commons
能对我有所帮助,但显然没有
我遗漏了什么吗?如果您试图压缩的内存中对象是可序列化的,那么这很容易 您可以获取任何可序列化实例,并将其转换为
字节[]
。我有一个实用的方法来做到这一点:
public static byte[] convertToBytes(Object object) throws IOException {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos)) {
out.writeObject(object);
out.flush();
return bos.toByteArray();
}
}
一旦有了以字节表示的对象,就可以使用ZipOutStream对其进行压缩:
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream out = new GZIPOutputStream(bos); ) {
out.write(bytes);
out.finish();
byte[] compressed = bos.toByteArray(); // this is my compressed data
}
(为了简单起见,我在这里使用Gzip,但您也可以创建一个包含多个条目的zip)。如果您尝试压缩的内存中对象是可序列化的,那么这是非常容易的 您可以获取任何可序列化实例,并将其转换为
字节[]
。我有一个实用的方法来做到这一点:
public static byte[] convertToBytes(Object object) throws IOException {
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos)) {
out.writeObject(object);
out.flush();
return bos.toByteArray();
}
}
一旦有了以字节表示的对象,就可以使用ZipOutStream对其进行压缩:
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream out = new GZIPOutputStream(bos); ) {
out.write(bytes);
out.finish();
byte[] compressed = bos.toByteArray(); // this is my compressed data
}
(为了简单起见,我在这里使用Gzip,但您也可以创建一个包含多个条目的zip)。要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题可能会导致堆栈溢出,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决问题所做的工作。您可以创建一个临时文件夹,将文件保存到其中,压缩文件并在操作后将其删除问题询问我们推荐或查找书籍、工具、软件库,教程或其他非站点资源对于堆栈溢出来说是非主题的,因为它们往往会吸引固执己见的答案和垃圾邮件。您可以创建一个临时文件夹,将文件保存到其中,压缩文件,然后在操作后将其删除谢谢您的回答!使用这种方法是否可以将多个文件放在不同的文件夹中?我确实希望有一个内存中的解决方案,因为一些文件应该加密,并且文件系统上不应该有未加密版本的文件。如果你想在zip中有一个目录结构,那么是的,我相信通过使用适当的ZipEntry对象是可能的。谢谢你的回答!使用这种方法是否可以将多个文件放在不同的文件夹中?我确实希望有一个内存中的解决方案,因为一些文件应该加密,并且文件系统上不应该有未加密版本的文件。如果您想在zip中有一个目录结构,那么是的,我相信通过使用适当的ZipEntry对象,这是可能的。