文档章节

JAVA对文件的解压缩操作(利用java.util.zip*下的类)

奔跑的码农
 奔跑的码农
发布于 2017/02/25 10:18
字数 584
阅读 94
收藏 3
点赞 0
评论 0
/**
 * Created by WangShiXiang on 2017/2/25.
 */
public class Zip {
    /**
     * 用来压缩单个文件
     * @param filepath 源文件路径
     * @param zippath 压缩完成后存放的路径
     */
    public static void addZipFile(String filepath,String zippath){
        File file=new File(filepath);
        File zipFile=new File(zippath);
        try {
            FileInputStream in=new FileInputStream(file);
            ZipOutputStream zipOut=new ZipOutputStream(new FileOutputStream(zipFile));
            zipOut.putNextEntry(new ZipEntry(file.getName()));
            byte[] buf=new byte[8*1024];
            int b;
            while((b=in.read(buf,0,buf.length))!=-1){
                zipOut.write(buf, 0, b);
            }
            in.close();
            zipOut.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    /**
     * 用来压缩一个文件夹里的所有内容,就是常规的文件压缩
     * @param filepath 文件或者文件夹的路径
     * @param zippath 生成ZIP文件的路径
     * @param dirFlg 是否包含当前的文件夹
     */
    public static void zipMuitFile(String filepath,String zippath,boolean dirFlg){

        try {
            File file=new File(filepath);
            File zipFile=new File(zippath);
            ZipOutputStream zipOut=new ZipOutputStream(new FileOutputStream(zipFile));
            if(file.isDirectory()){
                File[] files=file.listFiles();
                for(File fileSec:files){
                    if(dirFlg){
                        recursionZip(zipOut,fileSec,file.getName()+File.separator);
                    }else{
                        recursionZip(zipOut,fileSec,file.getName()+"");
                    }
                }
            }
            zipOut.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /**
     * 用来对文件的递归操作压缩
     * @param zipOut ZipOutputStream的输出流
     * @param file 文件或者文件夹的路径
     * @param baseDir 该文件在哪个文件夹下
     * @throws IOException
     */
    private static void recursionZip(ZipOutputStream zipOut,File file,String baseDir) throws IOException{
        if(file.isDirectory()){
            File[] files=file.listFiles();
            for(File fileSec:files){
                recursionZip(zipOut,fileSec,baseDir+file.getName()+File.separator);
            }
        }else{
            byte[] buf=new byte[1024*8];
            InputStream input=new FileInputStream(file);
            zipOut.putNextEntry(new ZipEntry(baseDir+file.getName()));
            int b;
            while((b=input.read(buf))!=-1){
                zipOut.write(buf, 0, b);
            }
            input.close();
        }
    }
    /**
     * 用来解压一个压缩包
     * @param zipFilePath :ZIP文件的路径
     * @param unZipFilePath :ZIP文件的输出路径
     * @param dirFlg:ZIP文件的保存路径是否包含压缩包的名字
     */

    public static void unZip(String zipFilePath,String unZipFilePath,boolean dirFlg){

        File zipFile=new File(zipFilePath);
        if(dirFlg){
            String fileName=zipFile.getName();
            if(fileName!=null&&fileName!=""){
                fileName=fileName.substring(0, fileName.lastIndexOf("."));
            }
            unZipFilePath=unZipFilePath+File.separator+fileName;
        }
        File unZipFileDir=new File(unZipFilePath);

        if(!unZipFileDir.exists()||!unZipFileDir.isDirectory()){
            unZipFileDir.mkdirs();
        }
        try {
            ZipFile zipFile_Z=new ZipFile(zipFile);
            ZipInputStream zipInput=new ZipInputStream(new FileInputStream(zipFile));
            ZipEntry entry=null;
            String entryFilePath=null;
            String entryDirPath=null;
            InputStream input=null;
            OutputStream output=null;
            File entryDir=null;
            File entryFile=null;
            int index=0;
            int content=0;
            while((entry=zipInput.getNextEntry())!=null){
                //构建压缩包中一个文件解压后保存的全路径
                entryFilePath=unZipFilePath+File.separator+entry.getName();
                //解压后保存文件的文件夹路径
                if((index=entryFilePath.lastIndexOf(File.separator))!=-1){
                    entryDirPath=entryFilePath.substring(0, index);
                }else{
                    entryDirPath="";
                }
                entryDir=new File(entryDirPath);
                //如果文件夹路径不存在,创建文件夹

                if(!entryDir.exists()||!entryDir.isDirectory()){
                    entryDir.mkdirs();
                }
                entryFile=new File(entryFilePath);
                input=new BufferedInputStream(zipFile_Z.getInputStream(entry));
                output=new BufferedOutputStream(new FileOutputStream(entryFile));
                byte[] buf=new byte[1024*8];
                while((content=input.read(buf, 0, buf.length))!=-1){
                    output.write(buf, 0, content);
                }
                output.flush();
                output.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

 

© 著作权归作者所有

共有 人打赏支持
奔跑的码农
粉丝 11
博文 25
码字总数 28867
作品 0
海淀
程序员
Tomcat与Jre绿色环境配置(生产环境)

Tomcat与Jre绿色环境配置(生产环境)博客分类: Apache Java jreapachetomcat Tomcat运行时需要jre的支持,一般有两种方式,一种是用jdk带的jre,另一种无需安装jdk只利用jre。这两种方式的...

thinkyoung
2015/12/31
0
0
淘宝Tprofiler工具实现分析

项目首页:https://github.com/alibaba/TProfiler 工具介绍 TProfiler是一个可以在生产环境长期使用的性能分析工具.它同时支持剖析和采样两种方式,记录方法执行的时间和次数,生成方法热点 对...

伍咖
2015/11/14
0
0
【J2EE系列】JNDI与tomcat连接池

JNDI与tomcat连接池 本章内容 ² JNDI与JNDI服务器 ² 编码实现JNDI目录服务与命名服务 ² 使用Tomcate JNDI服务器 一、JNDI概述 1、什么是JNDI? 英文全称是:Java Naming and Directory Inte...

磊神Ray
2012/02/15
0
1
Java压缩技术(一) ZLib

应好友需要,整理一下Java的压缩算法,先从ZLib开始。 相关链接: Java压缩技术(一) ZLib Java压缩技术(二) ZIP压缩——Java原生实现 Java压缩技术(三) ZIP解压缩——Java原生实现 Ja...

村长大神
2014/11/05
0
0
以简单的方式消除 Java 的冗长(Lombok)

复制的红薯的,自己只是做一个归档,方便自己看。 ------------------------------------------------------------------------------------ Lombok 是一种 Java Archive (JAR) 文件,可用来...

qqli
2012/12/27
0
0
安装配置JDK 1.7.0_45(Ubuntu下搭建Java开发环境一)

总体思路:将下载到的jdk-7u45-linux-i586.tar.gz解压缩,复制到/usr/lib/jdk,设置jdk环境变量并将其修改为系统默认的jdk。 1.下载JDK,http://www.oracle.com/technetwork/java/javase/dow...

AdelePan
2013/12/11
0
0
Instrumentation 实践详解

利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,有了这样的功能,开发者就可以实现更为灵活的和 了,这样的特性实际上提供了,使得开发者无需对 ...

陶邦仁
2014/12/30
0
0
Java反序列化漏洞的原理分析

  *本文原创作者:Moonlightos,本文属FreeBuf原创奖励计划,未经许可禁止转载   世界上有三件事最难:      把别人的钱装进自己的口袋里   把自己的想法装进别人的脑袋里   让自...

FreeBuf
05/04
0
0
用 JNI 进行 Java 编程(2)

从 Java 程序调用 C/C++ 代码 概述 当无法用 Java 语言编写整个应用程序时,JNI 允许您使用本机代码。在下列典型情况下,您可能决定使用本机代码: 希望用更低级、更快的编程语言去实现对时间...

Jerikc
2012/10/08
0
0
Android平台上的JNI技术介绍

NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最流行的智能手机操作系统。 图0-1 Android系统架构图 图0-1是Android系统架构图。大多数程序位于最...

ChowJames
2012/10/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
27分钟前
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部