日期:2014-05-20  浏览次数:20951 次

关于文件打成压缩包的问题
当前页面上有N条记录,每一条记录对应着一个文件,我现在能做的是单击每一条记录实现下载功能,或者设置一个按钮批量下载下来,但是这样会调用N次下载方法,经理要让我实现的是:设置一个按钮,单击的时候把所有文件打成一个压缩包下载下来,请问如何实现,有人做过没,每个文件的路径我可以得到。。。坐等高手支援.。。只剩44分了对不起大家

------解决方案--------------------
Java code

private void writeZipFile(File[] files) throws Exception {
      String zipName = "[" + getUserName() + System.currentTimeMillis() + "].zip";
      File zip = new File(tzipName);
      ZipOutputStream out = new ZipOutputStream(zip);

      for(int i = 0; i < files.length; i++) {
         if(files[i] == null) {
            continue;
         }

         FileInputStream in = new FileInputStream(files[i]);
         ZipEntry entry = new ZipEntry(files[i].getName().replaceAll("\\[.+\\]", ""));
         out.putNextEntry(entry);
         byte[] bytes = new byte[256];

         while(in.read(bytes) != -1) {
            out.write(bytes);
         }

         out.closeEntry();
         in.close();
      }

      out.flush();
      out.close();
   }

------解决方案--------------------
Java code

         String fileName = "";
         fileName  = URLEncoder.encode(fileName, "utf-8");
         servletResponse.setContentType("application/x-download");
         servletResponse.addHeader("Content-Disposition",
               "attachment;filename=" + fileName);

------解决方案--------------------
private static void dirToZip(String baseDirPath, File dir,
ZipOutputStream out) throws IOException {
// 得到一个文件列表 (本目录下的所有文件对象集合)
File[] files = dir.listFiles();
/**
* 要是这个文件集合数组的长度为 0 , 也就证明了这是一个空的文件夹

* 虽然没有再循环遍历它的必要,但是也要把这个空文件夹也压缩到目标文件中去
*/
if (files.length == 0) {
// 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
String zipFileName = getEntryName(baseDirPath, dir);
ZipEntry entry = new ZipEntry(zipFileName);
out.putNextEntry(entry);
out.closeEntry();
} else {
// 遍历所有的文件 一个一个地压缩
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isFile()) {
// 调用本类的一个静态方法 压缩一个文件
CompressUtil.fileToZip(baseDirPath, file, out);
} else {
/*
* 这是一个文件夹 所以要再次得到它下面的所有的文件
* 这里是自己调用自己..............递归..........
*/
CompressUtil.dirToZip(baseDirPath, file, out);
}
}
}
 }
------解决方案--------------------
java里哟个ZipOutputStream ,可以读写压缩文件