Как создать несколько папок в виде потока в ZIP в Java6 - PullRequest
0 голосов
/ 10 июня 2019

ниже приведен пример кода, который будет создавать zip-файл, но у нас есть сценарий добавления 100 выборочных папок с различным размером файла в каждую

 void createzipfile() {
   Map < String, byte[] > outputMap = new HashMap < String, byte[] > (); // will be 100 samplefolder folder with various size in each folder
   outputMap.put(samplefolder + "data.xml", xml.getBytes());
   outputMap.put(samplefolder + aa + "data.txt", data.getBytes());
   outputMap.put(samplefolder + bb + "data1.txt", data1.getBytes());
   outputMap.put(samplefolder + cc + "data2.txt", data2.getBytes());
   outputMap.put(samplefolder + "dd.txt", data3.getBytes());

   // Create output of zip file
   zipFile.createZipFile("data.zip");
   for (Map.Entry < String, byte[] > entry: outputMap.entrySet()) {
    zipFile.addFileToZip(entry.getKey(), entry.getValue());
   }
   zipFile.setDownloadStatus(DownloadTracker.Status.STOPPED_SUCCESS, "zip were successfully fetched");

   // Finalize zip file
   try {
    zipFile.writeAndClose();
   } catch (Exception e) {
    zipFile.setDownloadStatus(DownloadTracker.Status.STOPPED_ERROR, e.getMessage());
    logger.error("Error while creating zip file", e);
   } finally {
    zipFile.completeOutputFile();
    vinButtons = true;
   }
   logger.info("finished");
  }

  public void addFileToZip(String zipHierarchy, File file) throws FileNotFoundException {
   InputStream is = new FileInputStream(file);
   this.addFileToZip(zipHierarchy, (InputStream) is);
   try {
    is.close();
   } catch (IOException var5) {}

  }

  public boolean createZipFile(String zipName) {
   ExternalContext externalContext = this.facesContext.getExternalContext();
   externalContext.setResponseContentType("application/zip");
   externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"" + zipName + "\"");

   OutputStream responseStream;
   try {
    responseStream = externalContext.getResponseOutputStream();
   } catch (IOException var5) {
    logger.error("Failed to create zip file.");
    this.facesContext.responseComplete();
    return false;
   }

   this.zipStream = new ZipOutputStream(responseStream);
   this.downloadTracker.setStatus(Status.STARTED);
   return true;
  }

с текущей реализацией, возвращающей zip без добавления всей папки.пожалуйста, предоставьте какой-нибудь способ выполнить этот сценарий

...