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");
    }

}
时间: 2024-10-27 13:55:09

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

java I/O解析 及java.util.zip压缩

1.Java I/O框架采用装饰器模式,可按照读写方式分为字节流和字符流,二者根据数据源的不同都封装了不同的类(ByteArray.String.File.Pipe等),FilterInputStream.FilterOutputStream是用来提供装饰器类接口以控制特定输入流和输出流的两个类.字节流和字符流之间可以通过InputStreamReader和OutPutStreamWriter相互转换. 2.常用案例 import java.io.BufferedReader; import j

java.util.zip压缩打包文件总结二: ZIP解压技术

一.简述 解压技术和压缩技术正好相反,解压技术要用到的类:由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInputStream设置冗余校验码,如: CheckedInputStream cis = new CheckedInputStream(new FileInputStream( srcFile), new CRC32()); ZipInputStream zis = new ZipInputStream(cis); 需要注意的是,在构建解压文件时,需要

java架构 [Java 基础] 使用java.util.zip包压缩和解压缩文件

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile java中的每一个压缩文件都是可以使用ZipFile来进行表示的. File file = new File("F:/zippath.zip"); ZipFile zipFile = new ZipFile(file); System.out.println("压缩文

[Java 基础] 使用java.util.zip包压缩和解压缩文件

reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile java中的每一个压缩文件都是可以使用ZipFile来进行表示的. File file = new File("F:/zippath.zip&quo

java.util.zip.ZipOutputStream压缩无乱码(原创)

package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.zip.Adler32; import java.u

Java.util.zip 压缩与解压缩工具类

Java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类. 还包括使用 DEFLATE 压缩算法(用于 ZIP 和 GZIP 文件格式)对数据进行压缩和解压缩的类. 依赖 Jdk 编写该工具类,不依赖任何第三方 jar,随用随取,实现功能大体如下: 1.目录级别递归压缩与解压缩 zip: 2.单文件压缩和解压缩 zip : import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipIn

java.util.zip包在解压缩文件方面入门使用

工作空闲之余,无意间点了一下java.util.zip包下面的一些源码看了一看.知道其使用的范围就是针对我们日常中关于 文件的压缩和解压的操作.写了一些常用的压缩文件(单个文件和多个文件的压缩).解压文件(解压单个文件和文件夹)的 小小Demo. package com.clark.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IO

java.util.zip.Deflater 压缩 inflater解压 实例

原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.Deflater; import java.util.zip.Inflater; /** * ZLib压缩工具 * * @author 梁栋 * @version 1.0 * @since 1.0 */ public abs

java.util.zip

使用java自带的类 java.util.zip进行文件/目录的压缩的话,有一点不足,不支持中文的名件/目录命名,如果有中文名,那么打包就会失败.本人经过一段时间的摸索和实践,发现在一般的Ant.jar类库中也有zip类,import org.apache.tools.zip.*,能够解决不支持中文文件目录的问题,同时,Ant的获得途径也比较多,一般的应用服务器中有这个包,实在不行去下载个tomcat5.X,里面也有ant.jar,本人经过测试,可以使用. 例子如下: import java.i