澳门新葡萄京官网首页 2

Java压缩和解压文件工具类ZipUtil

在劳作进度中,需求将三个文件夹生成压缩文件,然后提需要顾客下载。所以本人写了贰个压缩文件的工具类。该工具类协理单个文件和文书夹压缩。放代码:

用于服务器端打包文件的,将减小后的公文写入到response输出流即可实以往劳务器端打包下载,扶持多元目录嵌套。
测验时能够先用ZipUtil.zip压缩某些文件夹test,获得压缩文件test.zip,然后将文件夹test删除,用ZipUtil.unzip解压test.zip就能够恢复生机。

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

【I /
O的流】压缩多个文本夹,满含文件夹下的具有文件,子文件夹,解压文件格局;压缩文件名字为普通话乱码的拍卖作品分类: Java的编程

PS:供给缓和汉语乱码的心上人能够参照此处
import
java.io.BufferedInputStream; import java.io.BufferedOutputStream; import
java.io.File; import java.io.FileInputStream; import
java.io.FileOutputStream; import java.io.IOException; import
java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import
java.util.zip.ZipOutputStream;

澳门新葡萄京官网首页,运路程序结果如下:

/
**
 *利用压缩库压缩/解压文件夹
 *因为爪哇的为主压缩库是不支持汉语文件名的。所以压缩后中文名的规规矩矩都形成了乱码,利用的RA奥迪Q3解压工具解压不了名叫乱码的压缩文件,但本身写的解压方法在窗户下解压后编码不荒谬展现汉语,而其他系统下则不能够健康还原;

/* 通过Java的Zip输入输出流达成减少和平解决压文件 * * @author liujiduo
** / public final class ZipUtil {

减弱以前的文件目录构造:

 

private static byte[] buffer = new byte[1024 * 10];

private ZipUtil() {
    // empty
}

/**
 * 压缩文件
 * 
 * @param filePath
 *            待压缩的文件路径
 * @return 压缩后的文件
 */
public static File zip(String filePath) {
    File target = null;
    File source = new File(filePath);
    if (source.exists()) {
        // 压缩文件名=源文件名.zip
        String zipName = source.getName() + ".zip";
        target = new File(source.getParent(), zipName);
        if (target.exists()) {
            target.delete(); // 删除旧的文件
        }
        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        try {
            fos = new FileOutputStream(target);
            zos = new ZipOutputStream(new BufferedOutputStream(fos));
            // 添加对应的文件Entry
            addEntry("/", source, zos);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            IOUtil.closeQuietly(zos, fos);
        }
    }
    return target;
}

/**
 * 扫描添加文件Entry
 * 
 * @param base
 *            基路径
 * 
 * @param source
 *            源文件
 * @param zos
 *            Zip文件输出流
 * @throws IOException
 */
private static void addEntry(String base, File source, ZipOutputStream zos)
        throws IOException {
    // 按目录分级,形如:/aaa/bbb.txt
    String entry = base + source.getName();
    if (source.isDirectory()) {
        for (File file : source.listFiles()) {
            // 递归列出目录下的所有文件,添加文件Entry
            addEntry(entry + "/", file, zos);
        }
    } else {
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        try {
            fis = new FileInputStream(source);
            bis = new BufferedInputStream(fis, buffer.length);
            int read = 0;
            zos.putNextEntry(new ZipEntry(entry));
            while ((read = bis.read(buffer, 0, buffer.length)) != -1) {
                zos.write(buffer, 0, read);
            }
            zos.closeEntry();
        } finally {
            IOUtil.closeQuietly(bis, fis);
        }
    }
}

/**
 * 解压文件
 * 
 * @param filePath
 *            压缩文件路径
 */
public static void unzip(String filePath) {
    File source = new File(filePath);
    if (source.exists()) {
        ZipInputStream zis = null;
        BufferedOutputStream bos = null;
        try {
            zis = new ZipInputStream(new FileInputStream(source));
            ZipEntry entry = null;
            while ((entry = zis.getNextEntry()) != null &amp;&amp; !entry.isDirectory()) {
                File target = new File(source.getParent(), entry.getName());
                if (!target.getParentFile().exists()) {
                    // 创建文件父目录
                    target.getParentFile().mkdirs();
                }
                // 写入文件
                bos = new BufferedOutputStream(new FileOutputStream(target));
                int read = 0;
                while ((read = zis.read(buffer, 0, buffer.length)) != -1) {
                    bos.write(buffer, 0, read);
                }
                bos.flush();
            }
            zis.closeEntry();
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            IOUtil.closeQuietly(zis, bos);
        }
    }
}

public static void main(String[] args) {
    String targetPath = "E:\Win7壁纸";
    File file = ZipUtil.zip(targetPath);
    System.out.println(file);
    ZipUtil.unzip("F:\Win7壁纸.zip");
}

澳门新葡萄京官网首页 1

 *能够用ant.jar包下的拉链类来压缩文件夹,Apache工具下的压缩库是永葆普通话的。(ant.jar包下边能够下载)

} “““java import java.io.Closeable; import java.io.IOException;

澳门新葡萄京官网首页 2

 第一种是没管理普通话乱码的

/ * IO流工具类 * * @author liujiduo * */ public class IOUtil {
/
* 关闭一个或七个流对象 * * @param closeables *
可关闭的流对象列表 * @throws IOException */ public static void
close(Closeable… closeables) throws IOException { if (closeables !=
null) { for (Closeable closeable : closeables) { if (closeable != null)
{ closeable.close(); } } } }

提示:借使是接收java.util下的java.util.zip举办打包处理,大概会现身粤语乱码难题,那是因为java的zip方法不援救理编辑码格式的变动,大家得以运用ant.java下的zip工具类来扩充包装管理。所以须求将ant.jar导入项目标lib目录下。

 *
@小编小苗
 * /

/**
 * 关闭一个或多个流对象
 * 
 * @param closeables
 *            可关闭的流对象列表
 */
public static void closeQuietly(Closeable... closeables) {
    try {
        close(closeables);
    } catch (IOException e) {
        // do nothing
    }
}

 第一种:

} “`

Java的代码 

 澳门新葡萄京官网首页 3

  1. 进口  的java.io.File;  
  2. 进口  java.io.FileInputStream;  
  3. 进口  java.io.FileNotFoundException;  
  4. 进口  java.io.FileOutputStream;  
  5. 进口  java.io.IOException;  
  6. 进口  java.io.InputStream;  
  7. 进口  java.util.zip.ZipEntry;  
  8. <strong> 进口  java.util.zip.ZipInputStream;  
  9. 进口  java.util.zip.ZipOutputStream;
    </强“  
  10.   
  11. / ** 
  12.  *压缩一个目录,包涵目录下的有所文件 
  13.  *爪哇的主干压缩库是不协理中文文件名的。 

发表评论

电子邮件地址不会被公开。 必填项已用*标注