`
sjsky
  • 浏览: 916940 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java解压zip和rar文件

    博客分类:
  • Java
阅读更多
       blog迁移至:http://www.micmiu.com

    本文主要讲一讲如何在java中实现对zip和rar文件的解压。
   本文的相关的源码源码下载
一、解压rar文件。
由于WinRAR 是共享软件,并不是开源的,所以解压rar文件的前提是系统已经安装了winrar,比如本人的安装路径是:
C:\\Program Files\\WinRAR\\winrar.exe
然后运用java.lang.Process 的相关知识来运行系统命令行来实现解压的。
winrar 命令行相关参数自己可以搜索下的网上资料很多
具体代码:
**
 * 解压rar文件(需要系统安装Winrar 软件)
 * @author Michael sun
 */
public class UnRarFile {
    /**
     * 解压rar文件
     * 
     * @param targetPath
     * @param absolutePath
     */
    public void unRarFile(String targetPath, String absolutePath) {

        try {

            // 系统安装winrar的路径
            String cmd = "C:\\Program Files\\WinRAR\\winrar.exe";
            String unrarCmd = cmd + " x -r -p- -o+ " + absolutePath + " "
                    + targetPath;

            Runtime rt = Runtime.getRuntime();
            Process pre = rt.exec(unrarCmd);
            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;
                }
                System.out.println(line);
            }

            bf.close();
        } catch (Exception e) {
            System.out.println("解压发生异常");
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String targetPath = "D:\\test\\unrar\\";
        String rarFilePath = "D:\\test\\test.rar";
        UnRarFile unrar = new UnRarFile();
        unrar.unRarFile(targetPath, rarFilePath);
    }

}

二、解压zip文件
由于zip是免费的,所以在jdk里提供了相应的类对zip文件的实现:
java.util.zip.*,详细情况可以参考java API
/**
 * 解压zip文件
 * @author Michael sun
 */
public class UnzipFile {

    /**
     * 解压zip文件
     * 
     * @param targetPath
     * @param zipFilePath
     */
    public void unzipFile(String targetPath, String zipFilePath) {

        try {
            File zipFile = new File(zipFilePath);
            InputStream is = new FileInputStream(zipFile);
            ZipInputStream zis = new ZipInputStream(is);
            ZipEntry entry = null;
            System.out.println("开始解压:" + zipFile.getName() + "...");
            while ((entry = zis.getNextEntry()) != null) {
                String zipPath = entry.getName();
                try {

                    if (entry.isDirectory()) {
                        File zipFolder = new File(targetPath + File.separator
                                + zipPath);
                        if (!zipFolder.exists()) {
                            zipFolder.mkdirs();
                        }
                    } else {
                        File file = new File(targetPath + File.separator
                                + zipPath);
                        if (!file.exists()) {
                            File pathDir = file.getParentFile();
                            pathDir.mkdirs();
                            file.createNewFile();
                        }

                        FileOutputStream fos = new FileOutputStream(file);
                        int bread;
                        while ((bread = zis.read()) != -1) {
                            fos.write(bread);
                        }
                        fos.close();

                    }
                    System.out.println("成功解压:" + zipPath);

                } catch (Exception e) {
                    System.out.println("解压" + zipPath + "失败");
                    continue;
                }
            }
            zis.close();
            is.close();
            System.out.println("解压结束");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String targetPath = "D:\\test\\unzip";
        String zipFile = "D:\\test\\test.zip";
        UnzipFile unzip = new UnzipFile();
        unzip.unzipFile(targetPath, zipFile);
    }

}

分享到:
评论
12 楼 cxl2086 2011-07-06  
jdk对zip的解压,中文会有乱码,用ant.jar 试过就没有乱码
11 楼 enefry 2011-03-21  
unrar解压好像是免费的吧.
10 楼 mqlfly2008 2010-08-29  
zip的解压算法是正确的,可以用到程序中!但如果在服务器端解压后传到view层时会出现乱码问题,以前是通过ant来解决的!希望能够看到其他的解决方式
9 楼 aa00aa00 2010-08-20  
windchill_java 写道
如此简单的东西,难道你解压或压缩还得指定WinRAR 的安装路径吗,搞笑很


是啊,你有什么好的办法,可以拿出来啊,呵呵
8 楼 sjsky 2010-03-31  
windchill_java 写道
如此简单的东西,难道你解压或压缩还得指定WinRAR 的安装路径吗,搞笑很

希望这位仁兄 给点解决方案能实现对rar文件的解压
7 楼 windchill_java 2010-03-31  
如此简单的东西,难道你解压或压缩还得指定WinRAR 的安装路径吗,搞笑很
6 楼 ray_linn 2010-03-31  
马上就见新手帖
5 楼 sjsky 2010-03-31  
mathfox 写道
真是有创意,这都能想出来

这是由于客户的特殊需要,需要对上传的压缩文件(可能rar 也可能是zip),解压后再对文件做相关处理,
所以想到了这样的办法  现在共享出来,希望对大家有所帮助
4 楼 sjsky 2010-03-31  
fjlyxx 写道
一个微软的算法 一个标准通用的算法 怎么会一样呢.

是不是我写的有歧义? 我没有说这两个算法是一样的,我是分开单独讲这两种文件的解压
3 楼 mathfox 2010-03-31  
真是有创意,这都能想出来
2 楼 mgcnrx11 2010-03-31  
不错,zip解压正好需要用到
1 楼 fjlyxx 2010-03-31  
一个微软的算法 一个标准通用的算法 怎么会一样呢.

相关推荐

    JAVA 上传ZIP,RAR文件并解压

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

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

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

    java 解压zip,rar文件

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

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

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

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

    2. 使用`ArchiveInputStream`和`ArchiveEntry`处理RAR文件。 示例代码: ```java import org.apache.commons.compress.archivers.rar.RarArchiveEntry; import org.apache.commons.compress.archivers.rar....

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

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

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

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

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

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

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

    本文通过具体的代码示例详细介绍了如何使用Java进行ZIP和RAR文件的压缩与解压缩操作。对于ZIP文件,我们利用了Java自带的API;而对于RAR文件,则引入了第三方库。此外,还特别关注了解压缩过程中的字符编码问题以及...

    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通用解压代码(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类型的

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

    java 解压zip,rar

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

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

    // 对于rar文件,替换ZipArchiveInputStream为RARArchiveInputStream // 对于7z文件,需要使用SevenZFileLibrary的API public static void zipFiles(String srcPath, String destZipFilePath) throws ...

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

    本文将详细介绍标题和描述中提到的几个关键知识点:Java中的zip、rar(包括处理带密码的RAR文件)、gz压缩,以及FTP工具类的使用。 1. **Java ZIP压缩与解压缩**: Java内置的`java.util.zip`包提供了处理ZIP文件...

    java rar和zip解压

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

    解压zip及rar文件依赖的jar包

    以下是一个简单的示例,展示如何使用这些库来解压ZIP和RAR文件: ```java import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.ice.junrar.Archive; import ...

    Java解压带密码的RAR文件

    Java解压RAR文件,压缩包内包含源码、Jar包、依赖包和示例程序,也可以从http://code.google.com/p/java-unrar/downloads/list这里下载支持密码的unrar项目(包括源码和jar包),其依赖包也很容易搜到。

Global site tag (gtag.js) - Google Analytics