`

java压缩与解压缩文件

    博客分类:
  • Java
 
阅读更多
http://www.oschina.net/code/snippet_2482052_54816

package com.yabushan.test.util.upload;
 
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.LoggerFactory;
 
public class ZipUtil {
    protected static final org.slf4j.Logger log = LoggerFactory.getLogger(ZipUtil.class);
    private static final int BUFFER = 2048;
 
    /**
     * 解压文件到指定路径
     * 
     * @param filePath
     * @param upZipPath
     * @return 返回解压的文件集合
     */
    public static List<File> unZip(String filePath, String upZipPath) {
        List<File> list = new ArrayList<File>();
        int count = -1;
        File file = null;
        InputStream is = null;
        FileOutputStream fos = null;
        BufferedOutputStream bos = null;
 
        // 生成指定的保存目录
        String savePath = upZipPath;
        if (!new File(savePath).exists()) {
            new File(savePath).mkdirs();
        }
 
        try {
            ZipFile zipFile = new ZipFile(filePath, "GBK");
            Enumeration enu = zipFile.getEntries();
            while (enu.hasMoreElements()) {
                ZipEntry zipEntry = (ZipEntry) enu.nextElement();
                if (zipEntry.isDirectory()) {
                    new File(savePath + "/" + zipEntry.getName()).mkdirs();
                    continue;
                }
                if (zipEntry.getName().indexOf("/") != -1) {
                    new File(savePath
                            + "/"
                            + zipEntry.getName().substring(0,
                                    zipEntry.getName().lastIndexOf("/")))
                            .mkdirs();
                }
                is = zipFile.getInputStream(zipEntry);
                file = new File(savePath + "/" + zipEntry.getName());
                fos = new FileOutputStream(file);
                bos = new BufferedOutputStream(fos, BUFFER);
 
                byte buf[] = new byte[BUFFER];
                while ((count = is.read(buf)) > -1) {
                    bos.write(buf, 0, count);
                }
 
                bos.flush();
                fos.close();
                is.close();
                list.add(file);
            }
 
            zipFile.close();
            return list;
        } catch (IOException ioe) {
            log.error(ioe.getMessage());
            return list;
        }
    }
 
    /**
     * RAR 需要配置rar路径
     * 
     * @param filePath
     * @param unRarPath
     *            路径要唯一,否则获取文件列表会出错
     * @return
     */
    public static int unRar(String filePath, String unRarPath) {
        int result = -99;
        if (!(new File(unRarPath).exists())) {
            new File(unRarPath).mkdirs();
        }
        try {
            //String cmd = GlobalConfig.getConfigValue("cmd.path");
            String cmd="test";
            String unrarCmd = cmd + " e -r -o+ " + filePath + " " + unRarPath;
            Runtime rt = Runtime.getRuntime();
 
            Process pre = rt.exec(unrarCmd);
            while(result==-99){
            try {
                Thread.sleep(1000L);
                result = pre.exitValue();
            } catch (Exception e) {
                // TODO: handle exception
                result = -99;
            }
            }
            InputStreamReader isr = new InputStreamReader(pre.getInputStream());
            BufferedReader bf = new BufferedReader(isr);
            String line = null;
            while ((line = bf.readLine()) != null) {
                line = line.trim();
                if ("".equals(line)) {
                    continue;
                }
                log.info(line);
            }
            bf.close();
            if (result != 0) {
                log.error("unRar " + pre.exitValue());
            }
            // 杀死进程 退出
            // pre.destroy();
            return result;
        } catch (Exception e) {
            log.error(e.getMessage() + ": " + e.getStackTrace());
            return -2;
        }
    }
 
    /***
     * 将多个文件打成压缩包
     * 
     * @param list
     *            需打包的文件路径集合
     * @param zipfilename
     *            压缩包名称
     */
    public static void listToZip(List<String> list, String zipfilename) {
        FileInputStream is = null;
        String path = "";
        File file = null;
        ZipOutputStream zos = null;
        try {
            if (list != null && list.size() > 0) {
                //String uri = GlobalConfig.getConfigValue("zipFile.path");
                String uri="D:/ZIP";
                File f = new File(uri);
                if(!f.exists()){
                    f.mkdirs();
                }
                zipfilename = uri + zipfilename;
                //创建zip文件输出流
                zos = new ZipOutputStream(new FileOutputStream(new File(
                        zipfilename)));
                zos.setEncoding("GBK");
                for (int i = 0; i < list.size(); i++) {
                    path = list.get(i);
                    file = new File(path);
                    if (file.exists()) {
                        //创建源文件输入流
                        is = new FileInputStream(file);
                        zos.putNextEntry(new ZipEntry(file.getName()));
                        byte[] buf = new byte[BUFFER];
                        int length = -1;
                        while ((length = is.read(buf)) != -1) {
                            zos.write(buf, 0, length);
                            zos.flush();
                        }
                        zos.closeEntry();
                        is.close();
                    } else {
                        System.out.println("源文件不存在");
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (zos != null) {
                    zos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
 
    }
    /***
     * 将多个文件打成压缩包(压缩包内文件名称由参数中传入)
     * 
     * @param list
     *            需打包的文件信息集合
     * @param zipfilename
     *            压缩包名称
     */
    public static void listMapToZip(List<Map<String,Object>> list, String zipfilename) {
        FileInputStream is = null;
        String path = "";
        File file = null;
        ZipOutputStream zos = null;
        try {
            if (list != null && list.size() > 0) {
                //String uri = GlobalConfig.getConfigValue("zipFile.path");
                String uri="D:/ZIP";
                File f = new File(uri);
                if(!f.exists()){
                    f.mkdirs();
                }
                zipfilename = uri + zipfilename;
                //创建zip文件输出流
                zos = new ZipOutputStream(new FileOutputStream(new File(
                        zipfilename)));
                zos.setEncoding("GBK");
                for (Map map : list) {
                    path = map.get("filePath")+"";
                    file = new File(path);
                    if (file.exists()) {
                        //创建源文件输入流
                        is = new FileInputStream(file);
                        zos.putNextEntry(new ZipEntry(map.get("fileName")+""));
                        byte[] buf = new byte[BUFFER];
                        int length = -1;
                        while ((length = is.read(buf)) != -1) {
                            zos.write(buf, 0, length);
                            zos.flush();
                        }
                        zos.closeEntry();
                        is.close();
                    } else {
                        System.out.println("源文件不存在");
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
                if (zos != null) {
                    zos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
 
        }
 
    }
    public static void main(String[] args) throws Exception {
        List<String> list = new ArrayList<String>();
        list.add("D:/File/img/tempImg/7f7ffd45856be6aa.txt");
        list.add("D:/File/img/tempImg/63f8959465093ec0.jpeg");
        list.add("D:/File/img/tempImg/815b476dc8cf790e.txt");
        list.add("D:/File/img/tempImg/4451519220dad91a.txt");
        //ZipUtil.listToZip(list, "测试.zip");
         
        System.out.println(ZipUtil.unZip("D:/ZIP测试.zip", "D:/ZIP/bb/").toString());
         
         
    }
}
分享到:
评论

相关推荐

    JAVA文件压缩与解压缩实践(源代码+论文)

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...

    (Java毕业设计)JAVA文件压缩与解压缩实践(源代码+).rar

    (Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业设计)JAVA文件压缩与解压缩实践(Java毕业...

    JAVA文件压缩与解压缩实践(源代码).zip

    JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...

    JAVA文件压缩与解压缩实践(源代码+论文).rar

    JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件压缩与解压缩实践(源代码+论文) JAVA文件...

    JAVA文件压缩与解压缩实践(源代码+LW).zip

    JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践(源代码+LW)JAVA文件压缩与解压缩实践...

    JAVA文件压缩与解压缩实践(源代码+论文).zip

    JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与解压缩实践(源代码+论文)JAVA文件压缩与...

    java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip

    java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文).zip java毕业设计——java文件压缩与解压缩实践设计与开发(源代码+论文)....

    JAVA文件压缩与解压缩实践(源代码+lw).rar

    JAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA文件压缩与解压缩实践(源代码+lw).rarJAVA...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    3. **解压缩文件** 解压ZIP文件则需要一个`ZipInputStream`实例,它包装在一个`FileInputStream`中,指向ZIP文件。通过调用`getNextEntry`方法,你可以逐个访问ZIP文件中的每个条目,然后创建相应的文件或目录,将...

    javaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程设计).rar

    javaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程设计).rarjavaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程设计).rarjavaweb毕业设计-JAVA文件压缩与解压缩实践(源代码+lw)(可做课程...

    java压缩文件解压缩和文件的压缩

    3. **解压缩文件**: `ZipInputStream`可以用来读取和解压缩ZIP文件。创建`ZipInputStream`,然后循环读取每个`ZipEntry`,创建对应的文件或目录,并将数据写入。 4. **RAR文件处理**: 对于RAR格式,Java标准库没有...

    JAVA文件压缩与解压缩实践的实现.rar

    Java文件压缩与解压缩是指将一个或多个文件或文件夹打包成一个压缩文件,或者将压缩文件解压缩成原始文件的过程。 常见的压缩格式包括ZIP、GZIP、TAR等,Java提供了相应的API来实现对这些格式的操作。 功能特点: ...

    适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar

    适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar 适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar 适合练手、课程设计、毕业设计的Java...

    java文件解压缩工具箱及案例

    在Java编程环境中,处理文件的压缩与解压缩是一项常见的任务,尤其在数据传输、存档或备份场景下。本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,...

    文件压缩解压缩

    在IT行业中,文件压缩与解压缩是日常工作中常见的操作,特别是在数据传输、存储优化和软件分发等领域。这里我们主要探讨的是一个简单的工具类,它支持zip、rar、tar等多种格式的压缩和解压缩功能,并且经过实际测试...

Global site tag (gtag.js) - Google Analytics