用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java 压缩和解压缩文件

2012-12-06 作者: 程序猿style举报

[java]代码库

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
 * 压缩,解压,删除,拷贝操作。
 *
 * 注意:此类中用到的压缩类ZipEntry等都来自于org.apache.tools包而非java.util。此包在ant.jar中有。
 *
 * * @author Tony
 */
public class FileUtil {
    protected static Logger log = LoggerFactory.getLogger(FileUtil.class);
 
    /**
     *
     * 压缩文件
     *
     * @param inputFileName
     *            要压缩的文件或文件夹路径,例如:c:\\a.txt,c:\\a\
     *
     * @param outputFileName
     *            输出zip文件的路径,例如:c:\\a.zip
     *
     */
    public static void zip(String inputFileName, String outputFileName)
            throws Exception {
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
                outputFileName));
        zip(out, new File(inputFileName), "");
        log.debug("压缩完成!");
        out.closeEntry();
        out.close();
    }
 
    /**
     *
     * 压缩文件
     *
     * @param out
     *            org.apache.tools.zip.ZipOutputStream
     *
     * @param file
     *            待压缩的文件
     *
     * @param base
     *            压缩的根目录
     *
     */
    private static void zip(ZipOutputStream out, File file, String base)
            throws Exception {
        if (file.isDirectory()) {
            File[] fl = file.listFiles();
            base = base.length() == 0 ? "" : base + File.separator;
            for (int i = 0; i < fl.length; i++) {
                zip(out, fl[i], base + fl[i].getName());
            }
        } else {
            out.putNextEntry(new ZipEntry(base));
            log.debug("添加压缩文件:" + base);
            FileInputStream in = new FileInputStream(file);
            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            in.close();
        }
    }
 
    /**
     *
     * 解压zip文件
     *
     * @param zipFileName
     *            待解压的zip文件路径,例如:c:\\a.zip
     *
     * @param outputDirectory
     *            解压目标文件夹,例如:c:\\a\
     *
     */
    public static void unZip(String zipFileName, String outputDirectory)
            throws Exception {
        ZipFile zipFile = new ZipFile(zipFileName);
        try {
            Enumeration<?> e = zipFile.getEntries();
            ZipEntry zipEntry = null;
            createDirectory(outputDirectory, "");
            while (e.hasMoreElements()) {
                zipEntry = (ZipEntry) e.nextElement();
                log.debug("解压:" + zipEntry.getName());
                if (zipEntry.isDirectory()) {
                    String name = zipEntry.getName();
                    name = name.substring(0, name.length() - 1);
                    File f = new File(outputDirectory + File.separator + name);
                    f.mkdir();
                    log.debug("创建目录:" + outputDirectory + File.separator + name);
                } else {
                    String fileName = zipEntry.getName();
                    fileName = fileName.replace('\\', '/');
                    if (fileName.indexOf("/") != -1) {
                        createDirectory(outputDirectory, fileName.substring(0,
                                fileName.lastIndexOf("/")));
                        fileName = fileName.substring(
                                fileName.lastIndexOf("/") + 1,
                                fileName.length());
                    }
                    File f = new File(outputDirectory + File.separator
                            + zipEntry.getName());
                    f.createNewFile();
                    InputStream in = zipFile.getInputStream(zipEntry);
                    FileOutputStream out = new FileOutputStream(f);
                    byte[] by = new byte[1024];
                    int c;
                    while ((c = in.read(by)) != -1) {
                        out.write(by, 0, c);
                    }
                    in.close();
                    out.close();
                }
            }
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        } finally {
            zipFile.close();
            log.debug("解压完成!");
        }
    }
 
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...