java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹

Posted renxiaoren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹相关的知识,希望对你有一定的参考价值。

一、简述

  zip用于压缩和解压文件。使用到的类有:ZipEntry  ZipOutputStream

二、具体实现代码

package com.joyplus.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @author 
 * 将文件中所有文件及文件夹压缩
 * source:  文件源的路径
 * dest:    压缩文件存放路径
 */
public class zipFiletest1 {
    
    //获取文件源中的所有文件
    private List<File> getSourceAllFiles(String from){
        List<File> fileList=new ArrayList<>();
        File fromfile=new File(from);
        File[] fileArr=fromfile.listFiles();
        for (File file : fileArr) {
            if(file.isFile()){
                fileList.add(file);
            }else{
                //利用递归之法,获取路径中子路径中的所有文件
                fileList.addAll(getSourceAllFiles(file.getPath()));
            }
        }
        return fileList;
    }
    
    //得到文件在文件夹中的相对路径 保持原有结构    (也可以根据需求自己创建新的结构)
    private String getRelName(String from,File f){
        String name=null;
        name=f.getAbsolutePath().replace(from+"\\", "");
        name=name.replace("\\", "/");
        System.out.println("文件相对路径是:"+name);
        return name;
    }
    
    //创建一个压缩文件,并存放到新的路径中
    public  void createZipFile(String from,String dest){
        List<File> fileList=getSourceAllFiles(from);
        ZipOutputStream zout=null;   //生成Zip输出流
        try {
             zout=new ZipOutputStream(new FileOutputStream(new File(dest)));
             //将每个文件放入Zip流中
             for (File f : fileList) {
                 InputStream is=new FileInputStream(f);
                 String name=getRelName(from, f); //获取文件相对路径  保持文件原有结构
                 ZipEntry en=new ZipEntry(new File(from).getName()+"/"+name); 
          //
ZipEntry ens=new ZipEntry(f.getName()); //这样只是把单独的文件压缩,不再有之前的结构
en.setSize(f.length()); zout.putNextEntry(en); zout.setComment(
"test"); //读取文件中的内容 int len=0; byte[] buffer=new byte[1024]; while((len=is.read(buffer))!=-1){ zout.write(buffer,0,len); } zout.flush(); is.close(); } zout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(zout!=null){ try { zout.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { zipFiletest1 test=new zipFiletest1(); test.createZipFile("D:\\EDI_MULIT_DOWNLOAD\\5fd0998a07c84d9d924076f64fb726a7", "D:\\sumZip\\co.zip"); } }

 

以上是关于java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Java ZIP压缩文件使用总结

java解压缩.gz .zip .tar.gz等格式的压缩包方法总结

如何使用java压缩文件夹成为zip包

Java解压缩.zip.tar.gz.tar.bz2(支持中文)

java对 zip文件的压缩和解压(ant解决中文乱码)

如何解压.tar.gz gzip gz 类型文档