Esse método é um exemplo de como um arquivo .zip pode ser criado e enviado como resposta ao usuário a partir de uma servlet.
[code language="java"] public static void gerarZipRecursivo(HttpServletRequest request, HttpServletResponse response, String path) throws IOException, ServletException { { byte[] buffer = new byte[4096]; // Create a buffer for copying int bytesRead; OutputStream out; response.setContentType("application/zip"); response.setHeader("Content-Disposition", "attachment; filename=\"NotasFiscaisXml.zip\""); out = response.getOutputStream(); ZipOutputStream outZip = new ZipOutputStream(out); Listarquivos = new ArrayList (); File dir = new File(path); if (dir.isDirectory()) { File[] sub = dir.listFiles(); for (File f : sub) { if (f.isDirectory()) { System.out.println(f); } else { arquivos.add(f); } } } for (Iterator it = arquivos.iterator(); it.hasNext();) { File file = it.next(); FileInputStream fin = new FileInputStream(file); byte fileContent[] = new byte[(int) file.length()]; fin.read(fileContent); ByteArrayInputStream in = new ByteArrayInputStream(fileContent); ZipEntry entry = new ZipEntry(file.getName()); outZip.putNextEntry(entry); while ((bytesRead = in.read(buffer)) != -1) { outZip.write(buffer, 0, bytesRead); } in.close(); } { String texto = "Arquivos gerados recursivamente a partir da pasta "+path; ByteArrayInputStream in = new ByteArrayInputStream(texto.getBytes()); ZipEntry entry = new ZipEntry("LEIAME" + ".txt"); outZip.putNextEntry(entry); while ((bytesRead = in.read(buffer)) != -1) { outZip.write(buffer, 0, bytesRead); } in.close(); } outZip.close(); request.getRequestDispatcher("jsp/notaFiscalEntCon.jsp?sAcao=empresa&sMenu=147&nPosicaoAtu=0&sWhere=0&nLinhas=100").forward( request, response); } [/code]