2017-07-28 14 views
1

这是我如何创建3个文件的Java创建嵌套压缩递归内存

FileOutputStream fos = new FileOutputStream(new File("out.zip")); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    try (ZipOutputStream zos = new ZipOutputStream(baos)) { 

     for (int i = 0; i < 3; i++) { 
      String s = "hello world " + i; 
      ZipEntry entry = new ZipEntry("text" + i + ".txt"); 
      zos.putNextEntry(entry); 
      zos.write(s.getBytes()); 
      zos.closeEntry(); 
     } 

    } 

    baos.writeTo(fos); 

我怎样才能把拉链内袋递归在一个回合中对飞一个简单的zip压缩包?有什么方法可以将ZipOutputStreamZipEntry放在彼此之内吗?

编辑:

解决方案马克建议:

FileOutputStream fos = new FileOutputStream(new File("out.zip")); 
    ByteArrayOutputStream resultBytes = new ByteArrayOutputStream(); 

    ByteArrayOutputStream zipOutStream = new ByteArrayOutputStream(); 
    try (ZipOutputStream zos2 = new ZipOutputStream(zipOutStream)) { 

     String s = "hello world "; 
     ZipEntry entry = new ZipEntry("text.txt"); 
     zos2.putNextEntry(entry); 
     zos2.write(s.getBytes()); 
     zos2.closeEntry(); 
     zos2.close(); 
    } 

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

     ZipEntry entry = new ZipEntry("text.zip"); 
     zos.putNextEntry(entry); 
     zos.write(zipOutStream.toByteArray()); 
     zos.closeEntry(); 
    } 

    baos.writeTo(resultBytes); 

    resultBytes.writeTo(fos); 

回答

0

对于 “内部” .ZIP文件,你可以使用的ByteArrayOutputStream而不是FileOutputStream;那么该zip将被构建为RAM中的数据;因此您可以使用生成的字节数组作为外部.ZIP文件中ZipEntry的数据。

+0

哦,这很容易。谢谢马克。我只需要将第一个ByteArrayOutputStream字节传递给下面的ZipOutputStream.write()方法。 –