java实现文件压缩与解压

摘要:
使用java压缩和解压缩文件是一个常见的功能。我最喜欢代码:1importjava.io.File;2importjava.util.ArrayList;3导入java.util.List;45importnet.lingala.zip文件;6importnet.lingala.zip4j.model.ZipParameters;7导入网.ling

用java实现文件的压缩与解压是很常见的功能。

我最爱上代码:

  

 1 import java.io.File;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4 
 5 import net.lingala.zip4j.core.ZipFile;
 6 import net.lingala.zip4j.model.ZipParameters;
 7 import net.lingala.zip4j.util.Zip4jConstants;
 8 
 9 /**
10  * zip压缩文件或解压文件工具类
11  * @author xiaoming
12  *
13  */
14 public class ZipUntil {
15 
16     
17     /**
18      * 压缩文件的方法
19      * @param files 要压缩文件的地址集合
20      * @param folders 要压缩的文件夹的地址集合
21      * @param pwd 压缩密码
22      * @param appointFile 压缩到指定文件夹的路径
23      * @return
24      * @throws Exception
25      */
26     public static int compressFile(List<String> files,List<String> folders,String pwd,String appointFile) throws Exception{
27         int flag=0;
28         if(!appointFile.isEmpty()){
29             File oldFile=new File(appointFile);
30             if(oldFile.exists()){
31                 return flag;
32             }
33             ZipFile zipFile=new ZipFile(appointFile);
34             ZipParameters parameters = new ZipParameters(); //设置参数 
35             parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);  
36             parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
37             if (!pwd.isEmpty()) {//有密码,用密码压缩
38                 parameters.setEncryptFiles(true);
39                 parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);  
40                 parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); 
41                 parameters.setPassword(pwd);
42             }
43             
44             if(!files.isEmpty()){
45                 ArrayList<File> toAddFile=new ArrayList<File>();
46                 for(String fileString : files){
47                     File file=new File(fileString);
48                     if(file.exists()){
49                         toAddFile.add(file);//添加文件
50                     }
51                 }
52                 if(!toAddFile.isEmpty()){
53                     zipFile.addFiles(toAddFile, parameters);
54                 }
55             }
56             if(!folders.isEmpty()){
57                 for(String folder : folders){
58                     File file=new File(folder);
59                     if(file.exists()){
60                         zipFile.addFolder(folder, parameters);//添加文件夹
61                     }
62                 }
63             }
64             flag=1;
65         }
66         return flag;
67     }
68     
69     
70     /**
71      * 解压文件的方法
72      * @param srcFile 要解压的文件
73      * @param path 解压到的路径
74      * @param pwd 解压密码
75      * @return
76      * @throws Exception
77      */
78     public static int unzip(String srcFile ,String path,String pwd ) throws Exception{
79         int flag=0;
80         if(!srcFile.isEmpty()){
81             ZipFile zipFile=new ZipFile(srcFile);//获取解压的文件
82             if(zipFile.isEncrypted()){
83                 zipFile.setPassword(pwd);//解压密码
84             }
85             zipFile.extractAll(path);//解压到指定路径
86             flag=1;
87         }
88         return flag;
89     }
90 }

以上代码基于zip4j.jar 开发的

相关包与例子下载:http://pan.baidu.com/s/1jGGOcEM

免责声明:文章转载自《java实现文件压缩与解压》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇字体单位大小对照换算表(字号、磅、英寸、像素)Python的断言assert下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#导出Excel-利用特性自定义数据

 网上C#导出Excel的方法有很多。但用来用去感觉不够自动化。于是花了点时间,利用特性做了个比较通用的导出方法。只需要根据实体类,自动导出想要的数据  1.在NuGet上安装Aspose.Cells或者用微软自带类库也可以  2.需要导出的数据的实例类: using System.ComponentModel; using System.Re...

C++中stringstream的使用方法和样例

  之前在leetcode中进行string和int的转化时使用过istringstream,现在大致总结一下用法和测试用例。     介绍:C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 istringstream类用于执行C++风格的串流的输...

c#复制文件夹和文件

/// <summary> /// 拷贝文件夹 /// </summary> /// <param name="srcdir"></param> /// <param name="desdir"></param> public static void CopyDirectory(str...

SpringAOP获取请求信息

当需要在aop中获取请求的参数,并做拦截时,可以参考下面的方法: package com.zxh.configure; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.JsonProces...

java箭头函数,lambda表达式

jdk8+以上引入了箭头函数,即J8的lambda表达式。 // 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y // 4. 接收2个in...

Flask-SQLAlchemy操作

Flask-SQLAlchemy SQLAlchemy 一. 介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 pip3 install sqlalchemy 组成部分: Engine,框架...