多文件生成压缩包,返回压缩包生成位置的路径。

FileUtil.java
/**
* 文件打压缩包
* @param files
* @param Name
* @return
* @throws Exception
*/
public static String zipFile(List<File> files, String Name)
throws Exception {
ZipOutputStream zipOut=null;
FileOutputStream fous=null;
/**创建一个临时压缩文件,我们会把文件流全部注入到这个文件中, 这里的文件你可以自定义是.rar还是.zip*/
String zipName = Name + System.currentTimeMillis();
File temp = File.createTempFile(zipName, ".zip");
try {
//创建文件输出流
fous = new FileOutputStream(temp);
zipOut = new ZipOutputStream(fous);
//压缩打包
zipFileToOutputStream(files, zipOut);
return temp.getPath();
}catch (Exception e) {
e.printStackTrace();
}finally{
if(zipOut!=null){
zipOut.close();
}
if(fous !=null){
fous.close();
}
}
return null;
} /**
* 把接受的全部文件打成压缩包
* @param files<File>;
* @param outputStream
*/
public static void zipFileToOutputStream(List<File> files, ZipOutputStream outputStream) {
int size = files.size();
for(int i = 0; i < size; i++) {
File file = (File) files.get(i);
inputFile(file, outputStream);
}
} /**
* 根据输入的文件与输出流对文件进行打包
* @param inputFile
* @param ouputStream
*/
public static void inputFile(File inputFile,ZipOutputStream ouputStream) {
try {
if(inputFile.exists()) {
/**如果是目录的话这里是不采取操作的*/
if (inputFile.isFile()) {
FileInputStream IN = new FileInputStream(inputFile);
BufferedInputStream bins = new BufferedInputStream(IN, 512);
//org.apache.tools.zip.ZipEntry
ZipEntry entry = new ZipEntry(inputFile.getName());
ouputStream.putNextEntry(entry);
// 向压缩文件中输出数据
int nNumber;
byte[] buffer = new byte[512];
while ((nNumber = bins.read(buffer)) != -1) {
ouputStream.write(buffer, 0, nNumber);
}
// 关闭创建的流对象
bins.close();
IN.close();
} else {
try {
File[] files = inputFile.listFiles();
for (int i = 0; i < files.length; i++) {
inputFile(files[i], ouputStream);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

调用:

// 生成压缩包
String tmpFilePath = FileUtil.zipFile(files, "张三");

最新文章

  1. 在 Windows 上安装Rabbit MQ 指南
  2. java selenium验证元素是否存在
  3. NODE学习:利用nodeJS去抓网页的信息
  4. SpringMVC项目,启动项目怎么总是报找不到log4j.properties文件
  5. UIStepper swift
  6. XAMPP 的安装配置
  7. 【动态规划】HDU 5791 Two
  8. Windows下AndroidStudio 中使用Git(AndroidStudio项目于GitHub关联)
  9. Dividing (hdu 1059 多重背包)
  10. js代码风格之链式结构
  11. Appium python自动化测试系列之appium环境搭建(二)
  12. Java 线程基本知识
  13. 用Docker解决坑爹的环境搭建系列——mysql:5.6
  14. linux 触摸屏驱动
  15. element 时间选择器——年
  16. 获取本地的ip,地址,code
  17. VUE axios 发送 Form Data 格式数据请求
  18. python - class类 (五) 继承补充-子类继承父类属性/函数方法
  19. PhoneGap开发的android项目环境搭建简单流程
  20. Windows Server 2008 R2下将nginx安装成windows系统服务

热门文章

  1. CM金丝雀Canary报错
  2. 开发完成的springboot项目扩展 swagger
  3. 【6.18校内test】T3细胞分裂
  4. css精灵图使用
  5. Thymeleaf模板中变量报红
  6. MYSQL 的事物处理(四大特性)
  7. 2018icpc宁夏邀请赛网络赛_G_Trouble of Tyrant
  8. node(koa2)跨域与获取cookie
  9. robots.txt写法大全和robots.txt语法的作用
  10. 吴恩达深度学习:2.12向量化logistic回归