以下Servlet可以将多个文件打包成一个zip文件并提示用户下载。 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 得到文件列表,这里可以来自用户选择,也可以是从数据库读取资料,动态生成的报表 String path = (String) request.getSession().getAttribute("filePath"); ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()); File file = new File(path); zipFile(file, "/", zos); zos.flush(); zos.close(); } private void zipFile(File f, String baseName, ZipOutputStream zos) throws IOException { if (f.exists() && f.isFile()) { zos.putNextEntry(new ZipEntry(baseName + f.getName())); FileInputStream fis = new FileInputStream(f); byte[] buffer = new byte[1024]; int r = 0; while ((r = fis.read(buffer)) != -1) { zos.write(buffer, 0, r); } fis.close(); } else { String dirName = baseName + f.getName() + "/"; zos.putNextEntry(new ZipEntry(dirName)); File[] subs = f.listFiles(); for (File file : subs) { zipFile(file, dirName, zos); } } } 其中的ZipOutputStream和ZipEntry来自java.util.zip包,也可用于动态从数据库中得到多个报表文件需提供给用户下载时使用。