日期:2014-05-20 浏览次数:20951 次
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(); }
------解决方案--------------------
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 ,可以读写压缩文件