Java版的WinRAR工具
最近做个东西,需要强大的Java版压缩组建支持,可惜没有开源的,最后实在没办法了。决定自己实现个,反正JDK中提供了最基础的API。
标题说WinRAR工具,夸大了,还没WinRAR那么强大,仅仅是一个zip工具组建,没有GUI界面,只有工具方法。
目标:
实现一个像WinRAR、WinZip一样可以同时混合压缩或者解压缩文件和文件夹的工具。目前仅支持zip文件,因为SUN Java API仅支持zip和gzip两种格式,gzip就像玩具枪,不中用,就不说了,下面是实现代码。
实现:
寥寥不到百行代码就搞定了,难点在于一个递归算法。
import java.io.*;
import java.util.Collection;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
//import org.apache.tools.zip.ZipEntry;
//import org.apache.tools.zip.ZipOutputStream;
/**
* Java版的Zip工具
*
* @author leizhimin 2008-11-27 11:16:05
*/
public class ZipUtils {
private static final int BUFF_SIZE = 1024 * 1024; //1M Byte
/**
* 批量压缩文件(夹)
*
* @param resFileList 要压缩的文件(夹)列表
* @param zipFile 生成的压缩文件
* @throws IOException 当压缩过程出错时抛出
*/
public static void zipFiles(Collection<File> resFileList, File zipFile) throws IOException {
ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile), BUFF_SIZE));
for (File resFile : resFileList) {
zipFile(resFile, zipout, "");
}
zipout.close();
}
/**
* 批量压缩文件(夹)
*
* @param resFileList 要压缩的文件(夹)列表
* @param zipFile 生成的压缩文件
* @param comment 压缩文件的注释
* @throws IOException 当压缩过程出错时抛出
*/
public static void zipFiles(Collection<File> resFileList, File zipFile, String comment) throws IOException {
ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile), BUFF_SIZE));
for (File resFile : resFileList) {
zipFile(resFile, zipout, "");
}
zipout.setComment(comment);
zipout.close();
}
/**
* 解压缩一个文件
*
* @param zipFile 压缩文件
* @param folderPath 解压缩的目标目录
* @throws IOException 当压缩过程出错时抛出
*/
public static void upZipFile(File zipFile, String folderPath) throws IOException {
ZipFile zf = new ZipFile(zipFile);
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
ZipEntry entry = ((ZipEntry) entries.nextElement());
InputStream in = zf.getInputStream(entry);
OutputStream out = new FileOutputStream(folderPath + File.separator + entry.getName());
byte buffer[] = new byte[BUFF_SIZE];
int realLength;
while ((realLength = in.read(buffer)) > 0) {
out.write(buffer, 0, realLength);
}
in.close();
out.close();
}
}
private static void zipFile(File resFile, ZipOutputStream zipout, String rootpath) throws IOException {
rootpath = rootpath + (rootpath.trim().length() == 0 ? "" : File.separator) + resFile.getName();
if (resFile.isDirectory()) {
File[] fileList = resFile.listFiles();
for (File file : fileList) {
zipFile(file, zipout, rootpath);
}
} else {
byte buffer[] = new byte[BUFF_SIZE];
BufferedInputStream in = new BufferedInputStream(new FileInputStream(resFile), BUFF_SIZE);
zipout.putNextEntry(new ZipEntry(rootpath));
int realLength;
while ((realLength = in.read(buffer)) != -1) {
zipout.write(buffer, 0, realLength);
}
in.close();
zipout.flush();
zipout.closeEntry();
}
}
}
测试代码:
public class Test {
public static void main(String[] args) throws IOException {
Collection<File> resFileList = new ArrayList<File>();
resFileList.add(new File("C:\\new.gif"));
resFileList.add(new File("C:\\HelloWorld.java"));
resFileList.add(new File("C:\\crebas.sql"));
resFileList.add(new File("E:\\log.log"));
resFileList.add(new File("C:\\ooo\\upx\\"));
File zipFile = new File("C:\\txxxt.zip");
ZipUtils.zipFiles(resFileList, zipFile);
}
}
运行结果:
压缩成功!
Process finished with exit code 0
查看硬盘的上压缩文件,没错,贴个图看看:
呵呵,经过查看,没问题,就是注释乱码。
经过反复测试,发现中文支持有问题。
google了一下解决方案,用ant包中的两个类
//import org.apache.tools.zip.ZipEntry;
//import org.apache.tools.zip.ZipOutputStream;
替换Java包的对应的两个类
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
即可完美支持中文。
分享到:
相关推荐
在Windows环境下,使用Java进行程序开发时,有时我们需要对文件进行压缩操作,比如将文件...这个过程涉及到了Java的本地方法调用、文件操作、第三方库集成等多个知识点,需要对Java、C/C++和WinRAR API有一定的了解。
可以进行单压缩或分卷压缩(后续会基于WinRAR6.02版本封装解压工具) 支持功能: 1,设置压缩密码(设置解压密码或压缩文件打开密码,默认没有密码) 2,设置五种压缩方式(存储、最快、快速、标准、较好、最优,默认为标准) 3...
然而,如果你需要在Java程序中集成文件压缩功能,那么理解并使用Java版的WinRAR源代码就显得尤为重要。本文将深入探讨如何在Java中实现WinRAR的功能,并基于提供的"WinRAR.java"和"Test.java"文件来讲解相关知识点。...
"调用WinRar实现加密压缩文件和解密解压缩文件"这个主题,主要涉及到如何利用WinRAR的API或者命令行工具,通过编程方式来实现对文件的压缩与解压,并且进行加密处理。这里我们将深入探讨这个过程,以及涉及到的相关...
2. **解压并运行**:下载的文件通常是一个压缩包,使用解压工具(如WinRAR或7-Zip)将其解压到任意目录。然后找到解压后的可执行文件,双击运行。 3. **使用JD-GUI**:启动JD-GUI后,你可以通过菜单栏的"File" -> ...
"签名工具2.0升级版"是一款专为Java平台设计的软件签名工具,旨在帮助用户修改和签署各类机顶盒的update.zip刷机包。下面将详细阐述这一工具及其相关知识点。 首先,我们要理解什么是软件签名。软件签名是在代码中...
使用解压缩工具,如WinRAR或7-Zip,可以直接打开APK并提取出其中的`classes.dex`文件,这是应用的主要Dex文件,包含大部分代码。 接下来,我们需要将Dex文件转换为Java字节码的Jar文件。这里用到的工具是dex2jar,...
在软件开发领域,尤其是对于处理文件压缩与解压缩的应用场景中,Java 提供了丰富的工具和库来支持这类操作。本篇文章将详细解析一个具体的 Java 示例代码,该示例展示了如何使用 `java-unrar` 库来解压 WinRAR 文件...
总结来说,“New WinRAR archive_jj2000-5.1java_”是一个结合了JPEG 2000图像压缩技术和Java编程环境的实例,展示了如何使用WinRAR工具将图像处理库打包并分发。这不仅体现了JPEG 2000的高效压缩优势,也突显了Java...
这个过程涉及到使用特定的工具,这些工具能够解析Java虚拟机(JVM)可执行的二进制格式并尝试重构出接近原始的源代码。在Java领域,有一些知名的反编译器工具,如JD-GUI、FernFlower、Procyon等。 标题“Java反编译...
标题"WINRAR超级正版软件"指的是著名的数据压缩工具——WinRAR的官方正版版本。WinRAR是一款广泛使用的文件压缩和解压缩软件,它提供了强大的压缩功能,支持多种压缩格式,如RAR和ZIP,同时也能够处理其他常见的压缩...
2. **解压JAD**: 使用解压缩工具如WinRAR打开"jad.rar",解压到你希望安装的目录,例如"C:\Tools\JAD"。 3. **配置环境变量**: 找到jad.exe所在的路径,比如"C:\Tools\JAD\jad.exe",然后添加到系统的PATH环境变量中...
在Java编程环境中,调用WinRAR进行压缩并设置密码是一项常见的任务,特别是在处理文件管理和数据保护的场景下。本文将详细讲解如何通过Java代码来实现这个功能,主要涉及的类是`RarJava.java`。 首先,由于Java标准...
Java解压和jar类查找工具是一种实用的开发辅助软件,尤其在处理大量jar包和zip文件时,能够高效地定位到所需的class文件。这个工具基于Java编程语言开发,支持在Linux和Windows操作系统环境下运行,其核心功能是通过...
"execWinrar"可能表示配置Eclipse调用WinRAR工具进行压缩或解压缩操作。这可以是打包过程的一部分,例如将JAR或WAR文件压缩为更便于传输的RAR格式,或者在部署前解压依赖库。 5. **自动化部署**: 通过Eclipse...
在这个压缩包中,你可能找到了ProGuard的安装和配置指南,JD-GUI的执行程序,以及其他可能的辅助工具,如用于查看和编辑jar文件的WinRAR或7-Zip,或者用于处理Java项目的IDE插件等。 混淆和反编译在实际应用中有着...
3. **文件管理与编辑工具**:如WinRAR、7-Zip等,用于解压和打包固件文件,以及编辑系统文件如XML配置、脚本或图像资源。 4. **系统修改工具**:如BusyBox、Root Explorer等,帮助用户访问和修改系统的深层次设置,...
Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...
本主题将深入探讨如何使用Java来创建一个文件解压缩工具箱,特别关注支持ZIP和RAR格式,并解决中文乱码问题。首先,我们需要了解两个核心库:`java-unrar-1.7.0-1.jar` 和 `ant-1.8.2.jar`。 `java-unrar-1.7.0-1....
这里推荐使用小颖 JAVA 源代码反编译系列专家 1.4 终极版,这款工具可以反编译整个目录下的所有 class 文件。 2. 选择压缩工具:选择合适的压缩工具也是非常重要的。这里推荐使用 Winrar,这款工具可以轻松地压缩...