java解析rar压缩文档

最近做项目,要提取rar压缩文档中的文本内容,方法接口为:

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

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

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

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

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

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

代码为:

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();
     }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java有一些库可以用来创建RAR文件压缩文件,其中最常用的是 "junrar" 库。下面是使用 "junrar" 库来创建RAR压缩文件的基本步骤: 1. 在Java项目中添加 "junrar" 库的依赖项。你可以通过Maven或Gradle等构建工具将依赖项添加到项目中。 2. 创建一个 RarArchiveEntry 对象,用于描述要压缩的文件或文件夹。 ```java RarArchiveEntry entry = new RarArchiveEntry(file, "filename.rar"); ``` 3. 创建一个 RarArchiveOutputStream 对象,用于写入压缩文件。 ```java RarArchiveOutputStream out = new RarArchiveOutputStream(new FileOutputStream(outputFile)); ``` 4. 使用 RarArchiveOutputStream 的 putArchiveEntry 方法将 RarArchiveEntry 对象写入输出流中。 ```java out.putArchiveEntry(entry); ``` 5. 将要压缩的文件写入输出流中。 ```java FileInputStream in = new FileInputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } ``` 6. 使用 RarArchiveOutputStream 的 closeArchiveEntry 方法关闭当前的 entry。 ```java out.closeArchiveEntry(); ``` 7. 最后,关闭 RarArchiveOutputStream 输出流。 ```java out.close(); ``` 完整的代码示例: ```java import org.apache.commons.compress.archivers.rar.RarArchiveEntry; import org.apache.commons.compress.archivers.rar.RarArchiveOutputStream; import java.io.*; public class CreateRarExample { public static void main(String[] args) throws IOException { File file = new File("path/to/file"); File outputFile = new File("path/to/output.rar"); RarArchiveEntry entry = new RarArchiveEntry(file, "filename.rar"); RarArchiveOutputStream out = new RarArchiveOutputStream(new FileOutputStream(outputFile)); out.putArchiveEntry(entry); FileInputStream in = new FileInputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) > 0) { out.write(buffer, 0, len); } out.closeArchiveEntry(); out.close(); } } ``` 请注意,RAR格式受到版权保护,使用RAR格式需要遵循相关法律法规。 ### 回答2: 要创建RAR压缩文件的Java库,可以按照以下步骤进行: 1. 导入RAR压缩库:首先,需要将RAR压缩库导入到Java开发环境中。可以从RAR官方网站或其他可信的资源网站下载RAR压缩库的jar文件。 2. 导入库并设置环境:将RAR压缩库的jar文件导入到Java项目的classpath中。可以在项目的构建路径或依赖管理中进行设置,确保可以在项目中使用RAR库的类和方法。 3. 引入库并初始化:在Java代码中,使用import语句引入RAR压缩库的相关类。然后,根据RAR压缩库的要求进行初始化工作,如设置压缩级别、密码等。 4. 创建RAR压缩文件:使用RAR压缩库提供的方法,创建一个新的RAR压缩文件。可以指定文件名、路径和压缩选项等信息。也可以选择性地设置密码,以提供额外的安全性。 5. 向RAR文件中添加文件:通过RAR压缩库的方法,将想要压缩的文件添加到创建的RAR压缩文件中。可以按照需要,添加一个或多个文件,并可以选择性地设定文件的压缩级别或密码。 6. 完成RAR文件的创建:在添加完所有要压缩的文件后,关闭RAR压缩文件,并将其保存到指定的目标路径中。确保文件保存成功,并在需要的时候可以正确地解压缩。 使用以上的步骤,可以创建一个用于压缩文件为RAR格式的Java库。这个库可以在Java项目中使用,方便地实现RAR文件的创建和管理,提供更多的文件压缩选项和安全性保护。 ### 回答3: 要创建RAR压缩文件的Java库,您可以按照以下步骤进行操作。 首先,您需要了解RAR文件的格式和压缩算法。RAR是一种常见的压缩文件格式,它使用Roshal Archive压缩算法来压缩和存储文件。在Java中创建RAR文件需要使用RAR文件格式的规范以及相应的压缩算法。 第二步是编写Java代码来处理RAR文件。您可以使用Java压缩库,如java.util.zip包中的类来处理ZIP文件。然而,对于RAR文件,Java没有内置的库可以直接使用。因此,您需要查找第三方库或开源项目来处理RAR文件。 许多开源项目提供了RAR库的Java绑定,您可以选择适合您需求的库。例如,您可以使用JRar或SevenZip-JBinding等库来创建RAR压缩文件。 安装选定的库后,您可以按照库的文档和示例代码来创建RAR压缩文件。通常情况下,您需要创建一个RAR文件对象,然后添加要压缩的文件或文件夹,并设置压缩选项(如压缩级别、密码等)。最后,您可以调用创建RAR文件的方法来生成RAR文件。 在创建RAR文件时,您还可以处理压缩过程中可能出现的错误或异常情况。例如,您可以捕获文件无法找到、无法读取或权限错误等异常,并相应地进行处理。 总结起来,为了创建RAR压缩文件的Java库,您需要了解RAR文件格式和压缩算法,查找适合您需求的第三方库或开源项目,然后编写Java代码来操作RAR文件。这样,您可以通过调用库提供的方法和设置相应的参数来创建RAR压缩文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值