`
aben328
  • 浏览: 1457209 次
  • 性别: Icon_minigender_1
  • 来自: 广东
社区版块
存档分类

关于java解压zip与rar的问题

    博客分类:
  • java
阅读更多

关于java解压zip与rar的问题

     这两天,因为项目需要,涉及到文件夹的上传,想了很久,在网上也找了一些资料,都没有什么很好的办法,都是用插件之类的解决,后面就想到了上传压缩文件,说到压缩文件,自然就会遇到,文件的解压缩问题,大家都知道,比较常见的压缩文件有rar,zip,然而rar,zip的区别又在哪?说一点,zip 压缩算法是免费开放的,任何人可以免费使用。但是 RAR 就不一样了,
这个压缩算法已经受到专利权的保护,如果要使用 RAR 算法必须向其专利所有人支付费用。所以在一般的开源网站,像apache,sourceforge等开源网站上的开源项目一般都用zip格式.本人所学语言主要为java自然会想用java去解压,用java去解压zip比较容易,有apache提供的开源项目ant,我在网上找一下,找到了sourceforge的开源项目unrar专用于压缩,解压rar.只可惜没有文档(让人即喜,又悲).

     下面是一个对zip,rar进行解压的程序(从http://topic.csdn.net/u/20090227/11/fd8c30ee-ce56-49be-bdea-d19d22a0da37.html转载,供大家一起享用,另外希望对unrar有比较发解的朋友,能发表一个人见解),

    

Java代码 复制代码
  1. import org.apache.tools.tar.TarEntry;   
  2. import org.apache.tools.tar.TarOutputStream;   
  3. import org.apache.tools.zip.ZipEntry;   
  4. import org.apache.tools.zip.ZipFile;   
  5. import org.apache.tools.zip.ZipOutputStream;  
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;
Java代码 复制代码
  1. import de.innosystec.unrar.Archive;  
import de.innosystec.unrar.Archive;
Java代码 复制代码
  1. /**   
  2.  *  *    
  3.  * @version 创建时间:Feb 26, 2009 6:01:11 PM   
  4.  * 类说明:压缩、解压文件公用类  
  5.  *  
  6.  */  
  7. public class Decompression {   
  8. private static final int BUFFEREDSIZE = 1024;   
  9.        
  10.     /**  
  11.      * 解压zip格式的压缩文件到指定位置  
  12.      * @param zipFileName 压缩文件  
  13.      * @param extPlace 解压目录  
  14.      * @throws Exception  
  15.      */  
  16.     @SuppressWarnings("unchecked")   
  17.     public synchronized void unzip(String zipFileName, String extPlace) throws Exception {   
  18.         try {   
  19.             (new File(extPlace)).mkdirs();   
  20.             File f = new File(zipFileName);   
  21.             ZipFile zipFile = new ZipFile(zipFileName);   
  22.             if((!f.exists()) && (f.length() <= 0)) {   
  23.                 throw new Exception("要解压的文件不存在!");   
  24.             }   
  25.             String strPath, gbkPath, strtemp;   
  26.             File tempFile = new File(extPlace);   
  27.             strPath = tempFile.getAbsolutePath();   
  28.             java.util.Enumeration e = zipFile.getEntries();   
  29.             while(e.hasMoreElements()){   
  30.                 org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();   
  31.                 gbkPath=zipEnt.getName();   
  32.                 if(zipEnt.isDirectory()){   
  33.                     strtemp = strPath + File.separator + gbkPath;   
  34.                     File dir = new File(strtemp);   
  35.                     dir.mkdirs();   
  36.                     continue;   
  37.                 } else {   
  38.                     //读写文件   
  39.                     InputStream is = zipFile.getInputStream(zipEnt);   
  40.                     BufferedInputStream bis = new BufferedInputStream(is);   
  41.                     gbkPath=zipEnt.getName();   
  42.                     strtemp = strPath + File.separator + gbkPath;   
  43.                    
  44.                     //建目录   
  45.                     String strsubdir = gbkPath;   
  46.                     for(int i = 0; i < strsubdir.length(); i++) {   
  47.                         if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {   
  48.                             String temp = strPath + File.separator + strsubdir.substring(0, i);   
  49.                             File subdir = new File(temp);   
  50.                             if(!subdir.exists())   
  51.                             subdir.mkdir();   
  52.                         }   
  53.                     }   
  54.                     FileOutputStream fos = new FileOutputStream(strtemp);   
  55.                     BufferedOutputStream bos = new BufferedOutputStream(fos);   
  56.                     int c;   
  57.                     while((c = bis.read()) != -1) {   
  58.                         bos.write((byte) c);   
  59.                     }   
  60.                     bos.close();   
  61.                     fos.close();   
  62.                 }   
  63.             }   
  64.         } catch(Exception e) {   
  65.             e.printStackTrace();   
  66.             throw e;   
  67.         }   
  68.     }   
  69.        
  70.     /**  
  71.      * 解压zip格式的压缩文件到指定位置  
  72.      * @param zipFileName 压缩文件  
  73.      * @param extPlace 解压目录  
  74.      * @throws Exception  
  75.      */  
  76.     @SuppressWarnings("unchecked")   
  77.     public synchronized void unzip(String zipFileName, String extPlace,boolean whether) throws Exception {   
  78.         try {   
  79.             (new File(extPlace)).mkdirs();   
  80.             File f = new File(zipFileName);   
  81.             ZipFile zipFile = new ZipFile(zipFileName);   
  82.             if((!f.exists()) && (f.length() <= 0)) {   
  83.                 throw new Exception("要解压的文件不存在!");   
  84.             }   
  85.             String strPath, gbkPath, strtemp;   
  86.             File tempFile = new File(extPlace);   
  87.             strPath = tempFile.getAbsolutePath();   
  88.             java.util.Enumeration e = zipFile.getEntries();   
  89.             while(e.hasMoreElements()){   
  90.                 org.apache.tools.zip.ZipEntry zipEnt = (ZipEntry) e.nextElement();   
  91.                 gbkPath=zipEnt.getName();   
  92.                 if(zipEnt.isDirectory()){   
  93.                     strtemp = strPath + File.separator + gbkPath;   
  94.                     File dir = new File(strtemp);   
  95.                     dir.mkdirs();   
  96.                     continue;   
  97.                 } else {   
  98.                     //读写文件   
  99.                     InputStream is = zipFile.getInputStream(zipEnt);   
  100.                     BufferedInputStream bis = new BufferedInputStream(is);   
  101.                     gbkPath=zipEnt.getName();   
  102.                     strtemp = strPath + File.separator + gbkPath;   
  103.                    
  104.                     //建目录   
  105.                     String strsubdir = gbkPath;   
  106.                     for(int i = 0; i < strsubdir.length(); i++) {   
  107.                         if(strsubdir.substring(i, i + 1).equalsIgnoreCase("/")) {   
  108.                             String temp = strPath + File.separator + strsubdir.substring(0, i);   
  109.                             File subdir = new File(temp);   
  110.                             if(!subdir.exists())   
  111.                             subdir.mkdir();   
  112.                         }   
  113.                     }   
  114.                     FileOutputStream fos = new FileOutputStream(strtemp);   
  115.                     BufferedOutputStream bos = new BufferedOutputStream(fos);   
  116.                     int c;   
  117.                     while((c = bis.read()) != -1) {   
  118.                         bos.write((byte) c);   
  119.                     }   
  120.                     bos.close();   
  121.                     fos.close();   
  122.                 }   
  123.             }   
  124.         } catch(Exception e) {   
  125.             e.printStackTrace();   
  126.             throw e;   
  127.         }   
  128.     }   
  129.     /**  
  130.      * 压缩zip格式的压缩文件  
  131.      * @param inputFilename 压缩的文件或文件夹及详细路径  
  132.      * @param zipFilename 输出文件名称及详细路径  
  133.      * @throws IOException  
  134.      */  
  135.     public synchronized void zip(String inputFilename, String zipFilename) throws IOException {   
  136.         zip(new File(inputFilename), zipFilename);   
  137.     }   
  138.        
  139.     /**  
  140.      * 压缩zip格式的压缩文件  
  141.      * @param inputFile 需压缩文件  
  142.      * @param zipFilename 输出文件及详细路径  
  143.      * @throws IOException  
  144.      */  
  145.     public synchronized void zip(File inputFile, String zipFilename) throws IOException {   
  146.         ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilename));   
  147.         try {   
  148.             zip(inputFile, out, "");   
  149.         } catch (IOException e) {   
  150.             throw e;   
  151.         } finally {   
  152.             out.close();   
  153.         }   
  154.     }   
  155.        
  156.     /**  
  157.      * 压缩zip格式的压缩文件  
  158.      * @param inputFile 需压缩文件  
  159.      * @param out 输出压缩文件  
  160.      * @param base 结束标识  
  161.      * @throws IOException  
  162.      */  
  163.     @SuppressWarnings("unused")   
  164.     private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException {   
  165.         if (inputFile.isDirectory()) {   
  166.             File[] inputFiles = inputFile.listFiles();   
  167.             out.putNextEntry(new ZipEntry(base + "/"));   
  168.             base = base.length() == 0 ? "" : base + "/";   
  169.             for (int i = 0; i < inputFiles.length; i++) {   
  170.                 zip(inputFiles[i], out, base + inputFiles[i].getName());   
  171.             }   
  172.         } else {   
  173.             if (base.length() > 0) {   
  174.                 out.putNextEntry(new ZipEntry(base));   
  175.             } else {   
  176.                 out.putNextEntry(new ZipEntry(inputFile.getName()));   
  177.             }   
  178.             FileInputStream in = new FileInputStream(inputFile);   
  179.             try {   
  180.                 int c;   
  181.                 byte[] by = new byte[BUFFEREDSIZE];   
  182.                 while ((c = in.read(by)) != -1) {   
  183.                     out.write(by, 0, c);   
  184.                 }   
  185.             } catch (IOException e) {   
  186.                 throw e;   
  187.             } finally {   
  188.                 in.close();   
  189.             }   
  190.         }   
  191.     }   
  192.     /**  
  193.      * 解压rar格式的压缩文件到指定目录下  
  194.      * @param rarFileName 压缩文件  
  195.      * @param extPlace 解压目录  
  196.      * @throws Exception  
  197.      */  
  198.     public synchronized void unrar(String rarFileName, String extPlace) throws Exception{   
  199.         try {   
  200.             (new File(extPlace)).mkdirs();   
  201.             // 构建测解压缩类   
  202.             Archive archive = new Archive();   
  203.             archive.setEnabledLog(false); //不输出日志   
  204.             // 设置rar文件   
  205.             archive.setFile(rarFileName);   
  206.             archive.setExtractPath(extPlace);   
  207.             archive.extractAllFile();   
  208.         } catch (Exception e) {   
  209.             // TODO: handle exception   
  210.         }   
  211.     }}  
  • ant.jar (1.2 MB)
  • 下载次数: 40
分享到:
评论
1 楼 xiaor186 2011-01-13  
好,谢谢你了

相关推荐

    JAVA 上传ZIP,RAR文件并解压

    在Java编程环境中,上传并...通过结合标准库和第三方库,我们可以构建一个功能完备的文件处理系统,满足上传、解压ZIP和RAR文件的需求。记得在实际开发中根据项目需求进行适当的调整和优化,确保系统的稳定性和效率。

    java实现的解压与压缩 zip和rar类型的

    本文将深入探讨如何使用Java实现ZIP和RAR类型的压缩与解压操作,以及相关知识点。 首先,我们来看ZIP文件格式。ZIP是一种广泛使用的文件压缩格式,其在Java中的处理主要通过`java.util.zip`包。这个包提供了多个类...

    Java通用解压代码(RAR5,Zip,7Z)

    以下是一个简单的解压Zip文件的例子: ```java import java.io.*; import java.util.zip.*; public class ZipExtractor { public static void extractZip(String zipFilePath, String outputDirectory) throws ...

    Java解压ZIP和RAR格式文件_所需资源.rar

    总结来说,Java中解压ZIP文件主要依赖`java.util.zip`包,而RAR文件则需要借助如Apache Commons Compress这样的第三方库。解压过程涉及到读取压缩文件流,创建文件或目录,以及将数据从输入流复制到输出流。这两个...

    Java解压zip,rar,7z的jar包

    在Java中,处理.zip、.rar和.7z等压缩格式通常需要借助第三方库,因为Java标准库JDK并不直接支持这些格式。本文将详细介绍如何使用特定的jar包来实现对这三种压缩格式的操作。 首先,.zip格式是Java标准库支持的,...

    java 解压zip,rar文件

    在Java编程环境中,解压ZIP和RAR文件是常见的任务,特别是在处理数据传输、备份或集成系统时。本文将深入探讨如何使用Java实现这一功能,并提供详细的步骤和代码示例。 首先,我们来看如何使用Java来解压ZIP文件。...

    JAVA解压缩ZIP或RAR格式的文件

    在Java编程环境中,解压缩ZIP或RAR格式的文件是一项常见的任务,这主要涉及到I/O流、文件操作以及压缩和解压缩库的使用。本篇将深入讲解如何在Java中实现这个功能,同时会介绍一些相关的工具和源码。 首先,对于ZIP...

    java实现批量解压带密码的 rar or zip 文件

    使用`java.util.zip`包中的`ZipInputStream`和`ZipEntry`类,可以读取并解压ZIP文件。以下是一个基本的解压流程: - 创建`ZipInputStream`实例,传入文件输入流。 - 循环遍历`ZipInputStream`的`ZipEntry`,获取...

    java 读取ZIP和RAR压缩包的目录结构

    java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;

    java 解压zip,rar

    本篇将详细讲解如何使用Java来解压ZIP和RAR文件。 首先,我们关注ZIP文件。Java标准库(Java SE)自带了`java.util.zip`包,提供了对ZIP文件的支持。`ZipInputStream`和`ZipEntry`是这个包中的核心类,用于读取和...

    java解压zip或rar压缩文件源码与jar包

    1. **Java解压ZIP文件**: - Java标准库提供了`java.util.zip`包,其中包含了解压缩ZIP文件所需的所有类。主要使用`ZipInputStream`和`ZipEntry`两个类。 - `ZipInputStream`是一个字节流,可以从输入流中读取ZIP...

    java解压zip或rar压缩文件(源码和jar包)

    java解压zip或rar压缩文件 包括源码和所需要的jar包:apache ant.jar 和 java-unrar-0.3.jar zip文件解压(要使用apache ant.jar以处理中文乱码) rar文件解压(要使用java-unrar-0.3.jar) 具有处理中文乱码功能 代码...

    java解压zip或rar压缩文件源码和jar包

    以下是一个简单的Java代码示例,展示如何解压zip文件: ```java import java.io.*; import java.util.zip.*; public class ZipExtractor { public static void main(String[] args) { String zipFilePath = ...

    java rar和zip解压

    这个例子展示了如何使用Apache Commons Compress库来解压RAR文件,原理与解压ZIP文件类似,只是使用的类和接口不同。 总的来说,Java处理RAR和ZIP文件的核心在于理解文件流和压缩流的概念,以及如何利用对应的API...

    java对zip、rar文件的压缩和解压缩

    ### Java对ZIP、RAR文件的压缩与解压缩技术解析 #### 概述 在实际开发过程中,文件的压缩与解压缩是一项非常常见的需求。本文将详细介绍如何使用Java语言实现ZIP和RAR格式文件的压缩与解压缩操作。文章通过具体的...

    详解Java无需解压直接读取Zip文件和文件内容

    Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面,我们将详细介绍如何使用Java...

    java zip rar(区分有无密码的RAR文件) gz ftp工具类

    1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件的功能。`ZipOutputStream`用于创建ZIP文件,而`ZipInputStream`则用于读取和解压。你可以通过遍历文件或目录,创建`ZipEntry`对象并...

    解压 java zip rar

    以上代码展示了如何使用Java处理ZIP和RAR文件的基本方法,包括解压文件和处理中文文件名。实际应用中可能需要根据具体需求进行异常处理和优化,例如递归处理子目录、进度反馈等。确保在使用第三方库时遵循其许可协议...

Global site tag (gtag.js) - Google Analytics