基本功能:
第一种:
E盘下某一个目录下所有文件以及文件夹打包下载
首先工具类 直接复制进去就好
public static void doCompress(String srcFile, String zipFile) throws IOException {
doCompress(new File(srcFile), new File(zipFile));
}
/**
* 文件压缩
* @param srcFile 目录或者单个文件
* @param zipFile 压缩后的ZIP文件
*/
public static void doCompress(File srcFile, File zipFile) throws IOException {
ZipOutputStream out = null;
try {
out = new ZipOutputStream(new FileOutputStream(zipFile));
doCompress(srcFile, out);
} catch (Exception e) {
throw e;
} finally {
out.close();//记得关闭资源
}
}
public static void doCompress(String filelName, ZipOutputStream out) throws IOException{
doCompress(new File(filelName), out);
}
public static void doCompress(File file, ZipOutputStream out) throws IOException{
doCompress(file, out, "");
}
public static void doCompress(File inFile, ZipOutputStream out, String dir) throws IOException {
if ( inFile.isDirectory() ) {
File[] files = inFile.listFiles();
if (files!=null && files.length>0) {
for (File file : files) {
String name = inFile.getName();
if (!"".equals(dir)) {
name = dir + "/" + name;
}
FileUtil.doCompress(file, out, name);
}
}
} else {
FileUtil.doZip(inFile, out, dir);
}
}
public static void doZip(File inFile, ZipOutputStream out, String dir) throws IOException {
String entryName = null;
if (!"".equals(dir)) {
entryName = dir + "/" + inFile.getName();
} else {
entryName = inFile.getName();
}
ZipEntry entry = new ZipEntry(entryName);
out.putNextEntry(entry);
int len = 0 ;
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(inFile);
while ((len = fis.read(buffer)) > 0) {
out.write(buffer, 0, len);
out.flush();
}
out.closeEntry();
fis.close();
}
测试:
打包 E:\testExport\export 以及下面所有子文件和文件夹
@RequestMapping(params = { "*****" })
public void exportShowPic(HttpServletRequest request,HttpServletResponse response) throws IOException {
String zipName = "myfile.zip";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename="+zipName);
ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
try {
FileUtil.doCompress("E:\\testExport\\export", out);
response.flushBuffer();
} catch (Exception e) {
e.printStackTrace();
}finally{
out.close();
}
}
结果:下载成功
以上是下载打包好的压缩文件
第二种:
将本地的文件直接打包到指定目录 不需要下载
还是先把方法给大家(也是copy的):
/**
* 压缩文件
*
* @param sourceFilePath 源文件路径
* @param zipFilePath 压缩后文件存储路径
* @param zipFilename 压缩文件名
*/
public void compressToZip(String sourceFilePath, String zipFilePath, String zipFilename) {
File sourceFile = new File(sourceFilePath);
File zipPath = new File(zipFilePath);
if (!zipPath.exists()) {
zipPath.mkdirs();
}
File zipFile = new File(zipPath + File.separator + zipFilename);
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
writeZip(sourceFile, "", zos);
//文件压缩完成后,删除被压缩文件
// boolean flag = deleteDir(sourceFile);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
/**
* 遍历所有文件,压缩
*
* @param file 源文件目录
* @param parentPath 压缩文件目录
* @param zos 文件流
*/
public static void writeZip(File file, String parentPath, ZipOutputStream zos) {
if (file.isDirectory()) {
//目录
parentPath += file.getName() + File.separator;
File[] files = file.listFiles();
for (File f : files) {
writeZip(f, parentPath, zos);
}
} else {
//文件
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) {
//指定zip文件夹
ZipEntry zipEntry = new ZipEntry(parentPath + file.getName());
zos.putNextEntry(zipEntry);
int len;
byte[] buffer = new byte[1024 * 10];
while ((len = bis.read(buffer, 0, buffer.length)) != -1) {
zos.write(buffer, 0, len);
zos.flush();
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e.getMessage(), e.getCause());
}
}
}
/**
* 删除文件夹
*
* @param dir
* @return
*/
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
//删除空文件夹
return dir.delete();
}
然后测试:
@RequestMapping(params = { "****" })
@ResponseBody
public AjaxJson exportShowPic(HttpServletRequest request,HttpServletResponse response) throws IOException {
AjaxJson ajaxJson = new AjaxJson();
try {
FileUtil fuUtil = new FileUtil();
String planId = request.getParameter("id");
System.out.println("planId"+planId);
String sourceFilePath ="E:\\testExport";
String zipFilePath ="E:\\11";
String fileName = "test.zip";
fuUtil.compressToZip(sourceFilePath, zipFilePath, fileName);
String zipName = "myfile.zip";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename="+zipName);
ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
ajaxJson.setSuccess(true);
ajaxJson.setMsg("下载成功");
} catch (Exception e) {
ajaxJson.setSuccess(false);
ajaxJson.setMsg("下载失败 联系管理员");
e.printStackTrace();
}
return ajaxJson;
}