title: How to create a zip file and download it?
body: <p>I am creating a zip file and downloading it. I am able to download all file files with out any error. But the files in the zip are placing in nested folders according to the files real path like C>Users>workspace>.metadata>.plugins>org.eclipse.wst.server.core>tmp0>wtpwebapps>finaldebrief while I am trying to zip 'finaldebrief' folder only. I want to get 'finaldebrief' folder directly in zip file. can someone help me out. Thanks in Advance.</p>
  
  <p>Here is my code</p>
  
  <pre><code>protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  
      int workshopid = Integer.parseInt(request.getParameter("currentworkshopid"));
  
      javax.servlet.ServletContext context = getServletConfig().getServletContext();
      String path = context.getRealPath("finaldebrief");
  
      try 
      { 
          response.setContentType("application/zip");
          response.setHeader("Content-Disposition", "attachment;filename=finaldebrief.zip");
  
          ZipOutputStream zos = new 
                 ZipOutputStream(response.getOutputStream()); 
  
          zipDir(path + "/", zos); 
  
          zos.close(); 
      } 
      catch(Exception e) 
      { 
          e.printStackTrace();
      } 
  
  }
  
  public void zipDir(String dir2zip, ZipOutputStream zos) 
  {
      try 
      { 
          //create a new File object based on the directory we have to zip File    
          File zipDir = new File(dir2zip); 
          //get a listing of the directory content 
          String[] dirList = zipDir.list(); 
          byte[] readBuffer = new byte[2156]; 
          int bytesIn = 0; 
          //loop through dirList, and zip the files 
          for(int i=0; i&lt;dirList.length; i++) 
          { 
              File f = new File(zipDir, dirList[i]); 
              if(f.isDirectory()) 
              { 
                  //if the File object is a directory, call this 
                  //function again to add its content recursively 
                  String filePath = f.getPath();
              //  String filePath = f.getCanonicalPath();
  
                  zipDir(filePath, zos);
                  //loop again 
                  continue; 
              } 
              //if we reached here, the File object f was not  a directory 
              //create a FileInputStream on top of f 
              FileInputStream fis = new FileInputStream(f); 
              // create a new zip entry 
              ZipEntry anEntry = new ZipEntry(f.getPath()); 
              //place the zip entry in the ZipOutputStream object 
              zos.putNextEntry(anEntry); 
              //now write the content of the file to the ZipOutputStream 
              while((bytesIn = fis.read(readBuffer)) != -1) 
              { 
                  zos.write(readBuffer, 0, bytesIn); 
              } 
              //close the Stream 
              fis.close(); 
          } 
      } 
      catch(Exception e) 
      { 
          e.printStackTrace(); 
      } 
  }
  </code></pre>