zoukankan      html  css  js  c++  java
  • 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"); } }

     注意:ZipEntry 与ZipOutputStream 不是用的java自带的类,import org.apache.tools.zip.*。java的java.util.zip包里也有这两个类,不过对中文的支持不佳,文件的注释与生成的文件名都不能用中文,否则乱码,不过对文件的内容不影响。

  • 相关阅读:
    已经加入了gitignore但任然modified
    强制升级方法
    从服务器上拷贝代码到虚拟机上编译不过
    IDEA 全局搜索选择后不关闭当前窗口
    jquery 好看的弹出层,过一会自动消失,有滚动条也能垂直居中(thymeleaf)( 代码库)
    Servlet 直接返回web前端(代码库)
    httpcore Immutable 升级替代方法
    重写equals-hashcode-标准方法(代码库)
    module的顺序影响jar包是从仓库来的,还是从其他module里来的
    AD登录过滤特殊字符,防止LDAP注入(代码库)
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5265808.html
Copyright © 2011-2022 走看看