欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java压缩和解压文件工具类ZipUtil,工具类ziputil,用于服务器端打包文件的,

来源: javaer 分享于  点击 28625 次 点评:167

Java压缩和解压文件工具类ZipUtil,工具类ziputil,用于服务器端打包文件的,


用于服务器端打包文件的,将压缩后的文件写入到response输出流即可实现在服务器端打包下载,支持多级目录嵌套。测试时可以先用ZipUtil.zip压缩某个文件夹test,得到压缩文件test.zip,然后将文件夹test删除,用ZipUtil.unzip解压test.zip即可还原。

PS:需要解决中文乱码的朋友可以参考此处 http://log-cd.iteye.com/blog/585647```javaimport 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;

/* * 通过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 && !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");}

}``````javaimport java.io.Closeable;import java.io.IOException;

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

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

}```

相关栏目:

用户点评