欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java生成压缩文件示例代码

程序员文章站 2024-02-15 09:32:28
代码: 复制代码 代码如下:import java.io.bufferedoutputstream;import java.io.file;import java.io....

代码:

复制代码 代码如下:

import java.io.bufferedoutputstream;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;

import org.apache.tools.zip.zipentry;
import org.apache.tools.zip.zipoutputstream;

/**
 * @project: test
 * @author chenssy
 * @date 2013-7-28
 * @description: 文件压缩工具类
 *                   将指定文件/文件夹压缩成zip、rar压缩文件
 */
public class compressedfileutil {
    /**
     * 默认构造函数
     */
    public compressedfileutil(){

    }

    /**
     * @desc 将源文件/文件夹生成指定格式的压缩文件,格式zip
     * @param resourepath 源文件/文件夹
     * @param targetpath  目的压缩文件保存路径
     * @return void
     * @throws exception
     */
    public void compressedfile(string resourcespath,string targetpath) throws exception{
        file resourcesfile = new file(resourcespath);     //源文件
        file targetfile = new file(targetpath);           //目的
        //如果目的路径不存在,则新建
        if(!targetfile.exists()){    
            targetfile.mkdirs(); 
        }

        string targetname = resourcesfile.getname()+".zip";   //目的压缩文件名
        fileoutputstream outputstream = new fileoutputstream(targetpath+"\\"+targetname);
        zipoutputstream out = new zipoutputstream(new bufferedoutputstream(outputstream));

        createcompressedfile(out, resourcesfile, "");

        out.close(); 
    }

    /**
     * @desc 生成压缩文件。
     *                  如果是文件夹,则使用递归,进行文件遍历、压缩
     *       如果是文件,直接压缩
     * @param out  输出流
     * @param file  目标文件
     * @return void
     * @throws exception
     */
    public void createcompressedfile(zipoutputstream out,file file,string dir) throws exception{
        //如果当前的是文件夹,则进行进一步处理
        if(file.isdirectory()){
            //得到文件列表信息
            file[] files = file.listfiles();
            //将文件夹添加到下一级打包目录
            out.putnextentry(new zipentry(dir+"/"));

            dir = dir.length() == 0 ? "" : dir +"/";

            //循环将文件夹中的文件打包
            for(int i = 0 ; i < files.length ; i++){
                createcompressedfile(out, files[i], dir + files[i].getname());         //递归处理
            }
        }
        else{   //当前的是文件,打包处理
            //文件输入流
            fileinputstream fis = new fileinputstream(file);

            out.putnextentry(new zipentry(dir));
            //进行写操作
            int j =  0;
            byte[] buffer = new byte[1024];
            while((j = fis.read(buffer)) > 0){
                out.write(buffer,0,j);
            }
            //关闭输入流
            fis.close();
        }
    }

    public static void main(string[] args){
        compressedfileutil compressedfileutil = new compressedfileutil();

        try {
            compressedfileutil.compressedfile("g:\\zip", "f:\\zip");
            system.out.println("压缩文件已经生成...");
        } catch (exception e) {
            system.out.println("压缩文件生成失败...");
            e.printstacktrace();
        }
    }
}