JAVA对文件的解压缩操作(利用java.util.zip*下的类)
JAVA对文件的解压缩操作(利用java.util.zip*下的类)
奔跑的码农 发表于10个月前
JAVA对文件的解压缩操作(利用java.util.zip*下的类)
  • 发表于 10个月前
  • 阅读 75
  • 收藏 3
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 文件的解压缩。
/**
 * 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();
        }

    }
}

 

标签: java ZIP
共有 人打赏支持
粉丝 11
博文 23
码字总数 28190
×
奔跑的码农
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: