`
oklook249900241
  • 浏览: 26903 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java解析rar压缩文档

阅读更多

int 为返回rar文件是否加密。
is为rar文件输入流。
textBuf为保存解析rar文档内的全部文档内容。

public int getText(InputStream is, StringBuffer textBuf){ }

java里面没有提供解析rar文档的类库,后来才知道,WinRAR 使用是需要付费的,并不是免费使用的。

由于 RAR 的专利性,没有专门的开源框架来解析 RAR 文档。

所以就只好用rar的命令来解析了。

具体做法是,根据输入进来的流把,该流表示的文件写入系统硬盘中。然后再用rar的命令来解析。这个方法看起来比较复杂,不过也只有这样了。

代码为:

<!--EndFragment-->

 

package RarExtract;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* 这里之所以要先把文件写入系统磁盘上,是因为外面只需要调用我这里的getext方法。
* 而getext只接受流为参数。这里没有把整个程序完全写出来,
* 只是在这里说明我这程序的思想。所以也没有经过测试。不过我的实际程序是这样写的,
* 也测试过是能达到要求的。
* @author Administrator
*
*/
public class RarExtractor {
/*
* 解压缩命令
*/
private static int g_File_Number = 0 ;//写入磁盘时rar文件的编号
private static String unrarCmd = "C://WinRAR//unrar.exe ";

public static void main(String[] args) {
          RarExtractor rar = new RarExtractor();
          InputStream is = null;
         StringBuffer text = new StringBuffer();
         try {
              is = new FileInputStream( "c://test.rar ");
              int n = rar.getText(is, text);
              System.out.println(text);
           } catch (FileNotFoundException e) {
             e.printStackTrace();
           }
}

/**
*
* @param is
* @param text
* @return
*/
private int getText(InputStream is, StringBuffer text) {
      // 写入文件的临时文件名
       String fileName = "tempfile " +   g_File_Number+ ".rar ";
       // 写入临时文件的路径
       String fileDir = "c:// "+fileName;
         try {
               //向文件中写入数据
                FileOutputStream fos = new FileOutputStrea(fileDir);
                int n = 0;
               byte[] b = new byte[1024];
               while ((n = is.read(b)) > 0) {
                    fos.write(b, 0, n);
                 }
                fos.close();//文件写完后关闭流

                 //用unrar命令打印输出rar文件列表
                String vbCmd = unrarCmd + " vb "+fileDir;
                Runtime rt = Runtime.getRuntime();  
                 Process p = rt.exec(vbCmd);
                InputStream newis = p.getInputStream();
                String fileList = null;//保持rar文件中的文件名列表
                 while((n = newis.read(b))> 0) {
                       if(fileList == null)
                              fileList = new String(b,0,n);
                      else {
                           fileList += new String(b,0,n);
                      }
              }
                   String[] fileListArray= null;
                   if(fileList == null)return 0;
                  fileListArray = fileList.split( "/r/n ");//windows系统下以“/r/n分割”
                   String subFileName = null;
                  String subFileCmd = null;
                 for(int i= 0 ; i < fileListArray.length; i++) {
                         subFileName = fileListArray[i];//获得rar文件内部单个文件名
                         //p 打印输出文件内容
                         subFileCmd = unrarCmd + " p "+fileDir + " "+subFileName;
                          Process subp = rt.exec(subFileCmd);
                           subInpuStream = subp.getInputStream();
                        //这里根据列表文件名,判断文件的类型,
                         //根据文件类型,调用不同的文档解析程序解析
                      //如果文档为rar文件则递归调用该方法

                        getText(subInputStream,text);
                   }


              } catch (IOException e) {
                e.printStackTrace();
           }
        //删除临时文件
           deleteFile(fileDir);
        return 0;
}

/**删除临时文件
* fileDir为临时文件完全路径
*/
    private void deleteFile(String fileDir) {
         File file = new File(fileDir);
           file.delete();
     }
}

 轉載來自:http://blog.csdn.net/wqjsir/article/details/4269165

分享到:
评论

相关推荐

    解析rar/zip文件压缩包

    解析rar/zip文件压缩包源码,只需要指定解析的文件夹里的压缩文件则可以全部解析出来,解析后的文件可以放到你指定的文件夹内。

    Java实现解压RAR文件

    一个用java实现解压RAR压缩文件的例子,由于RAR的压缩算法被专利,所以借助了第三方的包(此文件里包含三方包)。

    Java解压缩文件,尤其对于Rar5.0版本的解压实现.zip

    沙漏哦2022-09-16 16:00:57原证Java解压缩文件,尤其对于Rar5.0版本的解压实现 项目描述 junrar已经不再支持Rar5版本的压缩文件。sevenzipjbinding对于Rar5压缩包的解压是调用本地7z软件进行解压的,如果本机环境...

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

    在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...

    Java用GZIP压缩解压文件.rar

    一个Java随书实例:用GZIP压缩解压文件,从源文件得到文件输入流,得到目标文件输出流,得到压缩输出流,设定读入缓冲区尺寸,弹出文件选择器,并判断是否点击了打开按钮,判断事件来自于哪个按钮,用于选择解压和...

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

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

    java实现多个文件压缩成rar压缩包

    ### Java 实现多个文件压缩成 RAR 压缩包 #### 背景与目的 在日常工作中,经常会遇到需要将多个文件压缩为一个压缩包的情况,以便于存储、传输或备份。Java 作为一种广泛使用的编程语言,在处理文件操作方面提供了...

    JAVA 上传ZIP,RAR文件并解压

    在Java编程环境中,上传并处理ZIP和RAR压缩文件是一项常见的任务,特别是在文件传输、数据存储以及备份场景下。本文将详细讲解如何实现这个功能,包括文件上传、实时进度跟踪、指定解压路径以及解压过程。 首先,让...

    Java解析pdf,zip,doc等格式文档

    Java作为一种多用途的编程语言,提供了丰富的库和工具来解析PDF、ZIP、DOC和XLS等格式的文件。下面将详细介绍这些格式的解析方法。 首先,PDF(Portable Document Format)是一种用于存储和交换文档的格式,由Adobe...

    java 解析 tar gz.rar

    `.tar.gz`文件实际上是先用tar打包,再用gzip压缩,因此在Java中解析这种文件需要两个步骤:解压(gzip)和解包(tar)。 下面我们将深入探讨如何在Java中解析.tar.gz文件,并涉及相关的Java API和技术。 1. **...

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

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

    java解压rar 包含java-unrar-0.3.jar

    1. **RAR文件解析**:`java-unrar`库能够解析RAR文件头信息,获取文件名、压缩和未压缩大小、时间戳等元数据。 2. **文件提取**:你可以通过库提供的API指定RAR文件中的某个文件或目录进行提取,并保存到本地文件...

    利用TikaAPI解析各种文档

    在提供的压缩文件“TikaTest”中,可能包含了一些示例文档,用于演示如何使用Tika API进行解析。通过解压并运行相关代码,我们可以验证Tika的使用方法和功能,同时也可以测试其在不同文件格式上的表现。 总之,Tika...

    简单压缩工具(Java).rar_java工具_压缩工具

    "简单压缩工具(Java).rar" 提供了基于Java实现的压缩功能,这对于我们理解和掌握Java在文件压缩领域的应用非常有帮助。这个压缩包包含两个Java源文件(Jar.java和JarTool.java)以及一个文本文件(www.pudn.com.txt...

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

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

    java-jlha.zip-用于解、压缩lzh格式文件

    由于LZH格式相对较老,现代的压缩格式如ZIP、RAR和7Z在压缩效率和特性上通常更胜一筹,但LZH在某些特定场景(如兼容旧软件、处理小文件或对速度有要求的情况)仍具有一定的价值。因此,了解和掌握如何使用Java-JLHA...

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

    以下是对这个"JAVA文件压缩与解压缩实践"项目的详细解析。 首先,我们要了解Java中的压缩库,最常用的是Java标准库中的`java.util.zip`包,它提供了对ZIP和GZIPOutputStream等类的支持。在压缩文件时,我们可以利用...

    HaffmanCode.rar_java 哈夫曼_压缩 解压 java_哈夫曼 编码_哈夫曼压缩

    综上所述,"HaffmanCode.rar_java 哈夫曼_压缩 解压 java_哈夫曼 编码_哈夫曼压缩"是一个包含Java实现的哈夫曼编码压缩和解压工具。它涉及到了哈夫曼树的构建、编码生成、文件压缩和解压的算法,以及Java中处理二...

    毕业答辩-JAVA文件压缩与解压缩实践(源代码论文).rar

    Java文件压缩与解压缩是计算机科学中的一个常见任务,尤其在数据存储、传输和备份等领域。本实践项目涉及到了使用Java编程语言实现文件的压缩和解压缩功能,这对于理解和掌握文件处理技术至关重要。在此,我们将深入...

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...

Global site tag (gtag.js) - Google Analytics