频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
java压缩解压缩rar、zip文件
2013-03-19 09:35:17           
收藏   我要投稿
[java]  

package com.test;  

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.io.InputStream;  

  

import org.apache.tools.tar.TarEntry;  

import org.apache.tools.tar.TarOutputStream;  

import org.apache.tools.zip.ZipEntry;  

import org.apache.tools.zip.ZipFile;  

import org.apache.tools.zip.ZipOutputStream;  

  

import de.innosystec.unrar.Archive;  

  

/**  

 * @author Every E-mail/MSN:mwgjkf@hotmail.com 

 *   QQ:30130942 

 * @version 创建时间:Feb 26, 2009 6:01:11 PM  

 * 类说明:压缩、解压文件公用类 

 * 

 */  

public class Test {  

    private static final int BUFFEREDSIZE = 1024;  

    public Test() {  

        // TODO Auto-generated constructor stub  

    }  

  

    /** 

     * 解压zip格式的压缩文件到当前文件夹 

     * @param zipFileName 

     * @throws Exception 

     */  

    @SuppressWarnings("unchecked")  

    public synchronized void unzipFile(String zipFileName) throws Exception {  

        try {  

            File f = new File(zipFileName);  

            ZipFile zipFile = new ZipFile(zipFileName);  

            if((!f.exists()) && (f.length() <= 0)) {  

                throw new Exception("要解压的文件不存在!");  

            }  

            String strPath, gbkPath, strtemp;  

            File tempFile = new File(f.getParent());  

            strPath = tempFile.getAbsolutePath();  

            java.util.Enumeration e = zipFile.getEntries();  

            while(e.hasMoreElements()){  

                org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();  

                gbkPath=zipEnt.getName();  

                if(zipEnt.isDirectory()){  

                    strtemp = strPath + "/" + gbkPath;  

                    File dir = new File(strtemp);  

                    dir.mkdirs();  

                    continue;  

                } else {  

                    //读写文件  

                    InputStream is = zipFile.getInputStream(zipEnt);  

                    BufferedInputStream bis = new BufferedInputStream(is);  

                    gbkPath=zipEnt.getName();  

                    strtemp = strPath + "/" + gbkPath;  

                  

                    //建目录  

                    String strsubdir = gbkPath;  

                    for(int i = 0; i < strsubdir.length(); i++) {  

                        if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {  

                            String temp = strPath + "/" + strsubdir.substring(0, i);  

                            File subdir = new File(temp);  

                            if(!subdir.exists())  

                            subdir.mkdir();  

                        }  

                    }  

                    FileOutputStream fos = new FileOutputStream(strtemp);  

                    BufferedOutputStream bos = new BufferedOutputStream(fos);  

                    int c;  

                    while((c = bis.read()) != -1) {  

                        bos.write((byte) c);  

                    }  

                    bos.close();  

                    fos.close();  

                }  

            }  

        } catch(Exception e) {  

            e.printStackTrace();  

            throw e;  

        }  

    }  

      

    /** 

     * 解压zip格式的压缩文件到指定位置 

     * @param zipFileName 压缩文件 

     * @param extPlace 解压目录 

     * @throws Exception 

     */  

    @SuppressWarnings("unchecked")  

    public synchronized void unzip(String zipFileName, String extPlace) throws Exception {  

        try {  

            (new File(extPlace)).mkdirs();  

            File f = new File(zipFileName);  

            ZipFile zipFile = new ZipFile(zipFileName);  

            if((!f.exists()) && (f.length() <= 0)) {  

                throw new Exception("要解压的文件不存在!");  

            }  

            String strPath, gbkPath, strtemp;  

            File tempFile = new File(extPlace);  

            strPath = tempFile.getAbsolutePath();  

            java.util.Enumeration e = zipFile.getEntries();  

            while(e.hasMoreElements()){  

                org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();  

                gbkPath=zipEnt.getName();  

                if(zipEnt.isDirectory()){  

                    strtemp = strPath + File.separator + gbkPath;  

                    File dir = new File(strtemp);  

                    dir.mkdirs();  

                    continue;  

                } else {  

                    //读写文件  

                    InputStream is = zipFile.getInputStream(zipEnt);  

                    BufferedInputStream bis = new BufferedInputStream(is);  

                    gbkPath=zipEnt.getName();  

                    strtemp = strPath + File.separator + gbkPath;  

                  

                    //建目录  

                    String strsubdir = gbkPath;  

                    for(int i = 0; i < strsubdir.length(); i++) {  

                        if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {  

                            String temp = strPath + File.separator + strsubdir.substring(0, i);  

                            File subdir = new File(temp);  

                            if(!subdir.exists())  

                            subdir.mkdir();  

                        }  

                    }  

                    FileOutputStream fos = new FileOutputStream(strtemp);  

                    BufferedOutputStream bos = new BufferedOutputStream(fos);  

                    int c;  

                    while((c = bis.read()) != -1) {  

                        bos.write((byte) c);  

                    }  

                    bos.close();  

                    fos.close();  

                }  

            }  

        } catch(Exception e) {  

            e.printStackTrace();  

            throw e;  

        }  

    }  

      

    /** 

     * 解压zip格式的压缩文件到指定位置 

     * @param zipFileName 压缩文件 

     * @param extPlace 解压目录 

     * @throws Exception 

     */  

    @SuppressWarnings("unchecked")  

    public synchronized void unzip(String zipFileName, String extPlace,boolean whether) throws Exception {  

        try {  

            (new File(extPlace)).mkdirs();  

            File f = new File(zipFileName);  

            ZipFile zipFile = new ZipFile(zipFileName);  

            if((!f.exists()) && (f.length() <= 0)) {  

                throw new Exception("要解压的文件不存在!");  

            }  

            String strPath, gbkPath, strtemp;  

            File tempFile = new File(extPlace);  

            strPath = tempFile.getAbsolutePath();  

            java.util.Enumeration e = zipFile.getEntries();  

            while(e.hasMoreElements()){  

                org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();  

                gbkPath=zipEnt.getName();  

                if(zipEnt.isDirectory()){  

                    strtemp = strPath + File.separator + gbkPath;  

                    File dir = new File(strtemp);  

                    dir.mkdirs();  

                    continue;  

                } else {  

                    //读写文件  

                    InputStream is = zipFile.getInputStream(zipEnt);  

                    BufferedInputStream bis = new BufferedInputStream(is);  

                    gbkPath=zipEnt.getName();  

                    strtemp = strPath + File.separator + gbkPath;  

                  

                    //建目录  

                    String strsubdir = gbkPath;  

                    for(int i = 0; i < strsubdir.length(); i++) {  

                        if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {  

                            String temp = strPath + File.separator + strsubdir.substring(0, i);  

                            File subdir = new File(temp);  

                            if(!subdir.exists())  

                            subdir.mkdir();  

                        }  

                    }  

                    FileOutputStream fos = new FileOutputStream(strtemp);  

                    BufferedOutputStream bos = new BufferedOutputStream(fos);  

                    int c;  

                    while((c = bis.read()) != -1) {  

                        bos.write((byte) c);  

                    }  

                    bos.close();  

                    fos.close();  

                }  

            }  

        } catch(Exception e) {  

            e.printStackTrace();  

            throw e;  

        }  

    }  

    /** 

     * 压缩zip格式的压缩文件 

     * @param inputFilename 压缩的文件或文件夹及详细路径 

     * @param zipFilename 输出文件名称及详细路径 

     * @throws IOException 

     */  

    public synchronized void zip(String inputFilename, String zipFilename) throws IOException {  

        zip(new File(inputFilename), zipFilename);  

    }  

      

    /** 

     * 压缩zip格式的压缩文件 

     * @param inputFile 需压缩文件 

     * @param zipFilename 输出文件及详细路径 

     * @throws IOException 

     */  

    public synchronized void zip(File inputFile, String zipFilename) throws IOException {  

        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilename));  

        try {  

            zip(inputFile, out, "");  

        } catch (IOException e) {  

            throw e;  

        } finally {  

            out.close();  

        }  

    }  

      

    /** 

     * 压缩zip格式的压缩文件 

     * @param inputFile 需压缩文件 

     * @param out 输出压缩文件 

     * @param base 结束标识 

     * @throws IOException 

     */  

    @SuppressWarnings("unused")  

    private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException {  

        if (inputFile.isDirectory()) {  

            File[] inputFiles = inputFile.listFiles();  

            out.putNextEntry(new ZipEntry(base + "/"));  

            base = base.length() == 0 ? "" : base + "/";  

            for (int i = 0; i < inputFiles.length; i++) {  

                zip(inputFiles[i], out, base + inputFiles[i].getName());  

            }  

        } else {  

            if (base.length() > 0) {  

                out.putNextEntry(new ZipEntry(base));  

            } else {  

                out.putNextEntry(new ZipEntry(inputFile.getName()));  

            }  

            FileInputStream in = new FileInputStream(inputFile);  

            try {  

                int c;  

                byte[] by = new byte[BUFFEREDSIZE];  

                while ((c = in.read(by)) != -1) {  

                    out.write(by, 0, c);  

                }  

            } catch (IOException e) {  

                throw e;  

            } finally {  

                in.close();  

            }  

        }  

    }  

  

      

    /** 

     * 解压tar格式的压缩文件到指定目录下 

     * @param tarFileName 压缩文件 

     * @param extPlace 解压目录 

     * @throws Exception 

     */  

    public synchronized void untar(String tarFileName, String extPlace) throws Exception{  

          

    }  

      

    /** 

     * 压缩tar格式的压缩文件 

     * @param inputFilename 压缩文件 

     * @param tarFilename 输出路径 

     * @throws IOException 

     */  

    public synchronized void tar(String inputFilename, String tarFilename) throws IOException{  

        tar(new File(inputFilename), tarFilename);  

    }  

      

    /** 

     * 压缩tar格式的压缩文件 

     * @param inputFile 压缩文件 

     * @param tarFilename 输出路径 

     * @throws IOException 

     */  

    public synchronized void tar(File inputFile, String tarFilename) throws IOException{  

        TarOutputStream out = new TarOutputStream(new FileOutputStream(tarFilename));  

        try {  

            tar(inputFile, out, "");  

        } catch (IOException e) {  

            throw e;  

        } finally {  

            out.close();  

        }  

    }  

      

    /** 

     * 压缩tar格式的压缩文件 

     * @param inputFile 压缩文件 

     * @param out 输出文件  

     * @param base 结束标识 

     * @throws IOException 

     */  

    @SuppressWarnings("unused")  

    private synchronized void tar(File inputFile, TarOutputStream out, String base) throws IOException {  

        if (inputFile.isDirectory()) {  

            File[] inputFiles = inputFile.listFiles();  

            out.putNextEntry(new TarEntry(base + "/"));  

            base = base.length() == 0 ? "" : base + "/";  

            for (int i = 0; i < inputFiles.length; i++) {  

                tar(inputFiles[i], out, base + inputFiles[i].getName());  

            }  

        } else {  

            if (base.length() > 0) {  

                out.putNextEntry(new TarEntry(base));  

            } else {  

                out.putNextEntry(new TarEntry(inputFile.getName()));  

            }  

            FileInputStream in = new FileInputStream(inputFile);  

            try {  

                int c;  

                byte[] by = new byte[BUFFEREDSIZE];  

                while ((c = in.read(by)) != -1) {  

                    out.write(by, 0, c);  

                }  

            } catch (IOException e) {  

                throw e;  

            } finally {  

                in.close();  

            }  

        }  

    }  

      

     /** 

     * 解压rar格式的压缩文件到指定目录下 

     * @param rarFileName 压缩文件 

     * @param extPlace 解压目录 

     * @throws Exception 

     */  

    public synchronized void unrar(String rarFileName, String extPlace) throws Exception{  

        try {  

            (new File(extPlace)).mkdirs();  

            // 构建测解压缩类  

            Archive archive = new Archive();  

            archive.setEnabledLog(false); //不输出日志  

            // 设置rar文件  

            archive.setFile(rarFileName);  

            archive.setExtractPath(extPlace);  

            archive.extractAllFile();  

        } catch (Exception e) {  

            // TODO: handle exception  

        }  

    }  

      

    /** 

     * 执行实例 

     * @param args 

     */  www.2cto.com

    public static void main(String[] args) throws Exception {  

        Test decompression=new Test();  

        //decompression.unzipFile("d:/Inetpub.zip");  

        //decompression.unzip("d:/Inetpub.zip","d://Inetpub");  

        //decompression.zip("c:/Inetpub", "c:/Inetpub.zip");  

        decompression.unrar("d:/FSCapture62.rar", "d:/FSCapture62");  

          

    }  

}  

点击复制链接 与好友分享!回本站首页
相关TAG标签 文件
上一篇:java多线程复制文件
下一篇:hibernate 关联关系
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站