java文件压缩和解压

功能实现.

package com.test;

import java.io.File;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**
 * 该类实现文件夹压缩成zip文件和zip文件解压
 *
 * @author Administrator
 *
 */
public class Zip {
    private ZipInputStream zipIn; // 解压Zip
    private ZipOutputStream zipOut; // 压缩Zip
    private ZipEntry zipEntry;
    private static int bufSize; // size of bytes
    private byte[] buf;
    private int readedBytes;

    public Zip() {
        this(512);
    }

    public Zip(int bufSize) {
        this.bufSize = bufSize;
        this.buf = new byte[this.bufSize];
    }

    // 压缩文件夹内的文件
    public void doZip(String zipDirectory) {// zipDirectoryPath:需要压缩的文件夹名
        File file;
        File zipDir;

        zipDir = new File(zipDirectory);
        String zipFileName = zipDirectory + ".zip";// 压缩后生成的zip文件名

        try {
            this.zipOut = new ZipOutputStream(new BufferedOutputStream(
                    new FileOutputStream(zipFileName)));
            handleDir(zipDir, this.zipOut);
            this.zipOut.close();
        } catch (Exception ioe) {
            ioe.printStackTrace();
        }
    }

    // 由doZip调用,递归完成目录文件读取
    private void handleDir(File dir, ZipOutputStream zipOut) throws Exception {
        FileInputStream fileIn;
        File[] files;

        files = dir.listFiles();
        if (files.length == 0) {// 如果目录为空,则单独创建之.
            // ZipEntry的isDirectory()方法中,目录以"/"结尾.
            this.zipOut.putNextEntry(new ZipEntry(dir.toString() + "/"));
            this.zipOut.closeEntry();
        } else {// 如果目录不为空,则分别处理目录和文件.
            for (File fileName : files) {

                if (fileName.isDirectory()) {
                    handleDir(fileName, this.zipOut);
                } else {
                    fileIn = new FileInputStream(fileName);
                    String name = dir.getName();
                    // 生成的压缩包存放在原目录下
                    this.zipOut.putNextEntry(new ZipEntry(name + "/"
                            + fileName.getName().toString()));

                    // 此方法存放在该项目目录下
                    // this.zipOut.putNextEntry(new
                    // ZipEntry(fileName.toString()));
                    while ((this.readedBytes = fileIn.read(this.buf)) > 0) {
                        this.zipOut.write(this.buf, 0, this.readedBytes);
                    }
                    this.zipOut.closeEntry();
                }
            }
        }
    }

    // 解压指定zip文件
    public void unZip(String unZipfileName) {// unZipfileName需要解压的zip文件名
        FileOutputStream fileOut;
        File file;
        String f = unZipfileName.substring(0, unZipfileName.length() - 4);
        File ff = new File(f);
        try {
            this.zipIn = new ZipInputStream(new BufferedInputStream(
                    new FileInputStream(unZipfileName)));
            while ((this.zipEntry = this.zipIn.getNextEntry()) != null) {
                file = new File(this.zipEntry.getName());
                if (this.zipEntry.isDirectory()) {
                    file.mkdirs();
                } else {
                    // 如果指定文件的目录不存在,则创建之.
                    File parent = file.getParentFile();
                    if (!parent.exists()) {
                        parent.mkdirs();
                    }
                    if (!ff.exists()) {
                        ff.mkdir();
                    }
                    fileOut = new FileOutputStream(f + "/" + file.getName());

                    // fileOut = new FileOutputStream(file); 此方法存放到该项目目录下
                    while ((this.readedBytes = this.zipIn.read(this.buf)) > 0) {
                        fileOut.write(this.buf, 0, this.readedBytes);
                    }
                    fileOut.close();
                }

                this.zipIn.closeEntry();
            }
        } catch (Exception ioe) {
            ioe.printStackTrace();
        }
    }

    // 设置缓冲区大小
    public void setBufSize(int bufSize) {
        this.bufSize = bufSize;
    }

    // 测试Zip类
    public static void main(String[] args) throws Exception {
        Zip zip = new Zip();
        zip.doZip("e:\\test");
//        zip.unZip("c:\\test.zip");
    }
}
时间: 2024-10-10 21:02:22

java文件压缩和解压的相关文章

java zip压缩和解压(支持中文)

package com.xeon.mis.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; impor

34模块-zip【文件压缩和解压、图片压缩和编辑】

Zip模块管理文件压缩和解压,通过plus.zip可获取压缩管理对象. 比较常用的就是  对图片进行压缩.转码.旋转操作了 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no&q

c#自带类实现的多文件压缩和解压

c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容.下面的代码没有把多文件的目录结构加进去 using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; namespace Test.Zip { class CompressHelper { /// <su

.net文件压缩和解压及中文文件夹名称乱码问题

/**************************注释区域内为引用http://www.cnblogs.com/zhaozhan/archive/2012/05/28/2520701.html的博客内容 在.NET可以通过多种方式实现zip的压缩和解压:1.使用System.IO.Packaging:2.使用第三方类库:3.通过 System.IO.Compression 命名空间中新增的ZipArchive.ZipFile等类实现. 一.使用System.IO.Packaging压缩和解压

C# ICSharpCode.SharpZipLib.dll文件压缩和解压功能类整理,上传文件或下载文件很常用

工作中我们很多时候需要进行对文件进行压缩,比较通用的压缩的dll就是ICSharpCode.SharpZipLib.dll,废话不多了,网上也有很多的资料,我将其最常用的两个函数整理了一下,提供了一个通用的类,这样在工作中可以快速的完成压缩和解压缩的动作哦 官网下载地址:  http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx 1. 在项目中添加对ICSharpCode.SharpZipLib.dll的引用: 2. 在需要

python学习shutil模块的文件压缩和解压用法

shutil模块可以创建压缩包并返回文件路径,例如 zip,tar,下面详细其用法 base_name 压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存至当前目录,否则保存指定路径 data_bak 保存当前路径 format  压缩包种类  zip tar bztar gztar root_dir 要压缩的文件路径 owner 用户 group 用户组 logger 用于记录日志 1,压缩的用法 import zipfile z=zipfile.Zipfile('a.zip','w'

iOS网络-ZipArchive框架的文件压缩和解压

导入第三方框架ZipArchive之后还要在系统库文件中导入一个如下文件(搜索libz出来的任何一个都可以) 文件压缩 -(void)zip { NSArray *arrayM = @[@"/Users/gengqun/Desktop/Snip20160118_866.png", @"/Users/gengqun/Desktop/Snip20160118_867.png", @"/Users/gengqun/Desktop/Snip20160118_868

4_Linux_文件压缩和解压指令

3.4压缩解压命令.gz .tar.gz .zip .bz2 1)gzip 仅压缩文件 gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件] 压缩后的文件格式为.gz. 注: 1只能压缩文件 2不保留原文件 ? 2)gunzip 解压gunzip [压缩文件]或gzip –d [压缩文件] 3)tar 压缩文件和目录 tar命令用于打包目录,所在路径为/bin/tar,其语法格式为: tar 选项[-zcf] [压缩后的文件名] [目

Linux文件压缩和解压使用记录

一:tar(可压缩可解压) tar命令是Unix/Linux系统中备份文件的可靠方法,几乎可以工作于任何环境中,它的使用权限是所有用户.但是tar本身只是一个文件打包工具,只有和其他工具组合时才具有压缩/解压文件功能. 使用tar命令压缩文件的格式是:tar  参数[主选项+辅选项]   '文件或目录 ' 参数主选项 -c 创建新的档案文件.如果用户想备份一个目录或是一些文件,就要选择这个选项. -r 把要存档的文件追加到档案文件的未尾.例如用户已经做好备份文件,又发现还有一个目录或是一些文件忘