三沣开发知识 购物 网址 游戏 小说 歌词 地图 快照 股票 美女 新闻 笑话 | 汉字 软件 日历 阅读 下载 图书馆 开发 租车 短信 China
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题
autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml
html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
站长资讯 .NET新手 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA VisualStudio ASP.NET-MVC .NET控件开发 EntityFramework WinRT-Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动 Html-Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP OracleERP DynamicsCRM K2 BPM 信息安全 企业信息 Android开发 iOS开发 WindowsPhone WindowsMobile 其他手机 敏捷开发 项目管理 软件工程 SQLServer Oracle MySQL NoSQL 其它数据库 Windows7 WindowsServer Linux
  IT知识库 -> Java -> zip4j之加压解压 -> 正文阅读
 

[Java]zip4j之加压解压

zip4j之加压解压 最近看同事搞个文件打包,搞了大半天,还是有问题!嗨~~
网上明明有现成的,偏偏要自己写!
下面是基于zip4j实现加压解决的简单工具类

package com.learcher.zip;

import java.io.File;
import java.util.List;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

/**
 * @Code<code>ZipUtils</code>
 * @Comments
 *       <p>在线加压zip与解压zip</p>
 *       <p>依赖第三方jar包:zip4j_1.3.2.jar</p>
 *       <p>jar 来源:http://maven.outofmemory.cn/net.lingala.zip4j/zip4j/1.3.2/
 * @CreateDate 2017-10-14 下午3:23:02
 * @author   learcher
 * @modifyDate 
 * @modifier
 * @version  1.0a
 * @since    jdk1.6
 */
public class ZipUtils {
    
    /**
     *     解压密码
     */
    private static String PASSWORD="";
    
    public static void main(String[] args) throws ZipException {
        String zipFromFile = "E:/temp/tmp/需要压缩的文件或目录";
        String zipToFile = "E:/temp/tmp/压缩后的文件地址.zip";
        // 压缩文件夹或文件到指定目录下
        ZipUtils.zip(zipFromFile, zipToFile); 
//        ZipUtils.zip(zipFromFile, zipToFile, true);
//        ZipUtils.zip(zipFromFile, zipToFile, "password");
        
        String unZipFromFile = "E:/temp/tmp/需要加压文件.zip";
        String unZipToPath = "E:/temp/tmp/加压后存放目录";
        // 解压文件到指定目录
//        ZipUtils.unZip(unZipFromFile);
//        ZipUtils.unZip(unZipFromFile, unZipToPath);  
//        ZipUtils.unZip(unZipFromFile, unZipToPath, "password");
        
    }
    
    /**
     * @createDate:2017-10-14 下午4:50:03
     * @author:  learcher
     * @Description:
     *            <p>加压ZIP文件</p>
     * @param fromFile -> 需要加压的ZIP文件地址
     */
    public static void unZip(String fromFile){
        File file = new File(fromFile);
        doUnZip(file, file.getParent());
    }
    
    /**
     * @createDate:2017-10-14 下午4:50:55
     * @author:  learcher
     * @Description:
     *            <p>加压ZIP文件</p>
     * @param fromFile -> 需要加压的ZIP文件地址
     * @param toPath -> 加压后的文件存放地址
     */
    public static void unZip(String fromFile, String toPath){
        if (toPath == null || "".equals(toPath.trim())){
            unZip(fromFile);
        }else{
            doUnZip(new File(fromFile), toPath);
        }
    }

    /**
     * @createDate:2017-10-14 下午4:51:17
     * @author:  learcher
     * @Description:
     *            <p>加压ZIP文件</p>
     * @param fromFile -> 需要加压的ZIP文件地址
     * @param toPath -> 加压后的文件存放地址
     * @param Password -> 解压密码
     */
    public static void unZip(String fromFile, String toPath, String Password) {
        PASSWORD = Password;
        unZip(fromFile, toPath);
    }
    
    /**
     * @createDate:2017-10-14 下午4:48:00
     * @author:  learcher
     * @Description:
     *            <p>解压ZIP文件</p>
     * @param fromFile -> 需要加压 的zip文件
     * @param toPath -> 加压后存放的目录
     */
    private static void doUnZip(File fromFile, String toPath){
        try{
            ZipFile zipFile = new ZipFile(fromFile);  
            zipFile.setFileNameCharset("GBK");
            if (!zipFile.isValidZipFile()) {
                throw new ZipException("文件不合法或不存在!");
            }
            checkEncrypted(zipFile);
            List<FileHeader> fileHeaderList = zipFile.getFileHeaders();  
            for (int i = 0; i < fileHeaderList.size(); i++) {  
                FileHeader fileHeader = fileHeaderList.get(i);  
                zipFile.extractFile(fileHeader, toPath);  
            }  
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * @createDate:2017-10-14 下午4:15:36
     * @author:  learcher
     * @Description:
     *            <p>检查加压是否需要密码</p>
     */
    private static void checkEncrypted(ZipFile zip) throws ZipException {
        if (zip.isEncrypted()) {
            zip.setPassword(PASSWORD);
        }
    }
    
    /**
     * @createDate 2017-10-14 下午5:36:17
     * @author  learcher
     * @Description
     *            <p>把文件fromFile压缩为toFile</p>
     * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
     * @param toFile -> 压缩后的文件(完整路径)
     */
    public static void zip(String fromFile, String toFile){
        zip(fromFile, toFile, true);
    }
    
    /**
     * @createDate 2017-10-14 下午5:36:17
     * @author  learcher
     * @Description
     *            <p>把文件fromFile压缩为toFile</p>
     * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
     * @param toFile -> 压缩后的文件(完整路径)
     * @param password -> 设置解密密码,注:该密码最对文件控制
     */
    public static void zip(String fromFile, String toFile, String password){
        PASSWORD = password;
        zip(fromFile, toFile, true);
    }
    
    /**
     * @createDate 2017-10-14 下午5:36:17
     * @author  learcher
     * @Description
     *            <p>把文件fromFile压缩为toFile</p>
     *            <p>注:如果不覆盖,则会继续将新文件写入原有的zip包中</p>
     * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
     * @param toFile -> 压缩后的文件(完整路径)
     * @param cover -> 是否覆盖原有文件,true=覆盖
     */
    public static void zip(String fromFile, String toFile, boolean cover){
        File zipFile = new File(toFile);
        if (!zipFile.getParentFile().exists()) {
            zipFile.getParentFile().mkdirs();
        }
        if (zipFile.exists() && cover) {
            zipFile.delete(); // 覆盖原有 文件
        }
        doZip(new File(fromFile), toFile);
    }
    
    /**
     * @createDate 2017-10-14 下午5:33:44
     * @author  learcher
     * @Description
     *            <p>把文件fromFile压缩为toFile</p>
     * @param fromFile -> 需要进行压缩的文件或文件夹地址(完整路径)
     * @param toFile -> 压缩后的文件(完整路径)
     */
    private static void doZip(File fromFile, String toFile){
        try {
            ZipFile zip=new ZipFile(toFile); 
            zip.setFileNameCharset("GBK");
            ZipParameters param = new ZipParameters();
            // 设置压缩方式(默认方式)
            param.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
            // 设置压缩级别
            param.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
            setupPassword(param);
            if (fromFile.isFile()){
                zip.addFile(fromFile, param);
            }else{
                zip.addFolder(fromFile, param);
            }
        } catch (ZipException e) {
            e.printStackTrace();
        }
    }

    /**
     * @createDate:2017-10-14 下午5:13:41
     * @author:  learcher
     * @Description:
     *            <p>设置解压密码</p>
     * @param param -> ZipParameters 参数对象
     */
    private static void setupPassword(ZipParameters param) {
        if (PASSWORD != null && !"".equals(PASSWORD.trim())){
            // 设置加密文件
            param.setEncryptFiles(true);
            // 设置加密方式(必须要有加密算法)
            param.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
            // 设置秘钥长度
            param.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);  
            param.setPassword(PASSWORD);
        }
    }
}

更多信息可以去查看:http://blog.csdn.net/u011165335/article/details/50496930
  Java 最新文章
初入山门,需记门规
java 操作本地数据库 mysql
spring boot 整合 mybatis
单表(SSM、SpringBoot、SpringCloud、Free
Mybatis框架中Mapper动态代理方式
IDEA报错:Error starting ApplicationCont
LeetCode
类型转换及返回json对象的问题
spring事务源码解析
hibernate框架(2)
上一篇文章      下一篇文章      查看所有文章
加:2017-10-14 23:22:46  更:2017-10-14 23:22:53 
 
技术频道: 站长资讯 .NET新手区 ASP.NET C# WinForm Silverlight WCF CLR WPF XNA Visual Studio ASP.NET MVC .NET控件开发 Entity Framework WinRT/Metro Java C++ PHP Delphi Python Ruby C语言 Erlang Go Swift Scala R语言 Verilog 其它语言 架构设计 面向对象 设计模式 领域驱动设计 Html/Css JavaScript jQuery HTML5 SharePoint GIS技术 SAP Oracle ERP Dynamics CRM K2 BPM 信息安全 企业信息化其他 Android开发 iOS开发 Windows Phone Windows Mobile 其他手机开发 敏捷开发 项目与团队管理 软件工程其他 SQL Server Oracle MySQL NoSQL 其它数据库 Windows 7 Windows Server Linux
脚本语言: vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程
网站开发: CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 开发者乐园 Android开发资料
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2017年12日历
2017-12-12 10:44:17
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT知识库