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文件压缩包源码,只需要指定解析的文件夹里的压缩文件则可以全部解析出来,解析后的文件可以放到你指定的文件夹内。
一个用java实现解压RAR压缩文件的例子,由于RAR的压缩算法被专利,所以借助了第三方的包(此文件里包含三方包)。
沙漏哦2022-09-16 16:00:57原证Java解压缩文件,尤其对于Rar5.0版本的解压实现 项目描述 junrar已经不再支持Rar5版本的压缩文件。sevenzipjbinding对于Rar5压缩包的解压是调用本地7z软件进行解压的,如果本机环境...
一个Java随书实例:用GZIP压缩解压文件,从源文件得到文件输入流,得到目标文件输出流,得到压缩输出流,设定读入缓冲区尺寸,弹出文件选择器,并判断是否点击了打开按钮,判断事件来自于哪个按钮,用于选择解压和...
在Java编程环境中,解压不同类型的压缩文件,如RAR5、Zip和7z,是一项常见的任务。为了实现这一功能,我们需要使用特定的库,因为Java标准库并不直接支持RAR5和7z格式。这里我们将详细探讨如何使用Java来处理这些...
### Java对ZIP、RAR文件的压缩与解压缩技术解析 #### 概述 在实际开发过程中,文件的压缩与解压缩是一项非常常见的需求。本文将详细介绍如何使用Java语言实现ZIP和RAR格式文件的压缩与解压缩操作。文章通过具体的...
### Java 实现多个文件压缩成 RAR 压缩包 #### 背景与目的 在日常工作中,经常会遇到需要将多个文件压缩为一个压缩包的情况,以便于存储、传输或备份。Java 作为一种广泛使用的编程语言,在处理文件操作方面提供了...
Java作为一种多用途的编程语言,提供了丰富的库和工具来解析PDF、ZIP、DOC和XLS等格式的文件。下面将详细介绍这些格式的解析方法。 首先,PDF(Portable Document Format)是一种用于存储和交换文档的格式,由Adobe...
`.tar.gz`文件实际上是先用tar打包,再用gzip压缩,因此在Java中解析这种文件需要两个步骤:解压(gzip)和解包(tar)。 下面我们将深入探讨如何在Java中解析.tar.gz文件,并涉及相关的Java API和技术。 1. **...
java ZIP和RAR 压缩包 目录结构。 1.ant.jar 解决java自带zip不能读取中文压缩包的问题; 2.需要安装WINRAR软件,以便解压rar文件,然后获取对应目录; 3.实现在线预览压缩包目录结构的功能;
1. **RAR文件解析**:`java-unrar`库能够解析RAR文件头信息,获取文件名、压缩和未压缩大小、时间戳等元数据。 2. **文件提取**:你可以通过库提供的API指定RAR文件中的某个文件或目录进行提取,并保存到本地文件...
在提供的压缩文件“TikaTest”中,可能包含了一些示例文档,用于演示如何使用Tika API进行解析。通过解压并运行相关代码,我们可以验证Tika的使用方法和功能,同时也可以测试其在不同文件格式上的表现。 总之,Tika...
"简单压缩工具(Java).rar" 提供了基于Java实现的压缩功能,这对于我们理解和掌握Java在文件压缩领域的应用非常有帮助。这个压缩包包含两个Java源文件(Jar.java和JarTool.java)以及一个文本文件(www.pudn.com.txt...
由于LZH格式相对较老,现代的压缩格式如ZIP、RAR和7Z在压缩效率和特性上通常更胜一筹,但LZH在某些特定场景(如兼容旧软件、处理小文件或对速度有要求的情况)仍具有一定的价值。因此,了解和掌握如何使用Java-JLHA...
"Java读取Zip文件和文件内容" Java无需解压直接读取Zip文件和文件内容是Java语言中的一种常见操作,通过使用java.util.zip包中的ZipFile、ZipInputStream和ZipEntry类,我们可以轻松地读取Zip文件和文件内容。下面...
以下是对这个"JAVA文件压缩与解压缩实践"项目的详细解析。 首先,我们要了解Java中的压缩库,最常用的是Java标准库中的`java.util.zip`包,它提供了对ZIP和GZIPOutputStream等类的支持。在压缩文件时,我们可以利用...
综上所述,"HaffmanCode.rar_java 哈夫曼_压缩 解压 java_哈夫曼 编码_哈夫曼压缩"是一个包含Java实现的哈夫曼编码压缩和解压工具。它涉及到了哈夫曼树的构建、编码生成、文件压缩和解压的算法,以及Java中处理二...
Java文件压缩与解压缩是计算机科学中的一个常见任务,尤其在数据存储、传输和备份等领域。本实践项目涉及到了使用Java编程语言实现文件的压缩和解压缩功能,这对于理解和掌握文件处理技术至关重要。在此,我们将深入...
标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...
标题中的“myjava.rar_MyMemo.INI_java.rar”表明这是一个与Java编程语言相关的压缩文件,其中包含了“MyMemo.INI”和“java.rar”两个关键元素。这可能是一个小型项目或者示例程序,用于演示如何处理配置文件(如My...