700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java解压zip和rar文件

java解压zip和rar文件

时间:2018-11-14 11:15:45

相关推荐

java解压zip和rar文件

前言

日常使用中有解压软件可以解压压缩包,但是生产中一般都是代码完成。

1.声明依赖(集成环境:IJ.IDEA)

<!-- 解压rar --><dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>3.0.0</version></dependency><!-- 解压zip --><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.9.4</version></dependency><!-- 单元测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

2.直接贴代码,把两个解压程序写到一个类里面

import com.github.junrar.Archive;import com.github.junrar.rarfile.FileHeader;import org.apache.tools.zip.ZipEntry;import org.apache.tools.zip.ZipFile;import java.io.*;import java.util.Enumeration;public class UnZipAnRar {public static void unZip(File zipFile, String outDir) throws IOException {File outFileDir = new File(outDir);if (!outFileDir.exists()) {boolean isMakDir = outFileDir.mkdirs();if (isMakDir) {System.out.println("创建压缩目录成功");}}ZipFile zip = new ZipFile(zipFile);for (Enumeration enumeration = zip.getEntries(); enumeration.hasMoreElements(); ) {ZipEntry entry = (ZipEntry) enumeration.nextElement();String zipEntryName = entry.getName();InputStream in = zip.getInputStream(entry);if (entry.isDirectory()) {//处理压缩文件包含文件夹的情况File fileDir = new File(outDir + zipEntryName);fileDir.mkdir();continue;}File file = new File(outDir, zipEntryName);file.createNewFile();OutputStream out = new FileOutputStream(file);byte[] buff = new byte[1024];int len;while ((len = in.read(buff)) > 0) {out.write(buff, 0, len);}in.close();out.close();}}public static void unRar(File rarFile, String outDir) throws Exception {File outFileDir = new File(outDir);if (!outFileDir.exists()) {boolean isMakDir = outFileDir.mkdirs();if (isMakDir) {System.out.println("创建压缩目录成功");}}Archive archive = new Archive(new FileInputStream(rarFile));FileHeader fileHeader = archive.nextFileHeader();while (fileHeader != null) {if (fileHeader.isDirectory()) {fileHeader = archive.nextFileHeader();continue;}File out = new File(outDir + fileHeader.getFileNameString());if (!out.exists()) {if (!out.getParentFile().exists()) {out.getParentFile().mkdirs();}out.createNewFile();}FileOutputStream os = new FileOutputStream(out);archive.extractFile(fileHeader, os);os.close();fileHeader = archive.nextFileHeader();}archive.close();}}

Notes:上面程序使用了两个工具包,其中解压 rar 文件的 junrar 可能会出现最新 winrar 软件的压缩包解压不了的情况,这种情况暂时没法处理,只能等待 junrar 更新。

3.测试代码

import org.junit.Test;import java.io.File;import java.io.IOException;public class UnZipAnRarTest {@Testpublic void getUnZipAnnRarTest() {String originDir = "D:\\JavaPro\\TestFile\\";String zipPath = originDir + "test.zip";File zipFile = new File(zipPath);String rarPath = originDir + "new.rar";File rarFile = new File(rarPath);try {UnZipAnRar.unZip(zipFile, "D:\\JavaPro\\TestFile\\Test\\");} catch (IOException e) {e.printStackTrace();}try {UnZipAnRar.unRar(rarFile, "D:\\JavaPro\\TestFile\\测试\\");} catch (Exception e) {e.printStackTrace();}}}

4.结果展示

其中一个压缩文件的内容:

解压以后:

5.结语

junrar 的包有缺陷

其一:如果压缩文件中有中文名字的文件夹,解压以后文件夹名字是乱码,但是不影响文件夹里面的文件;

其二:最新 WinRar 压缩产生的 .rar 文件可能会无法解压。

缺陷原因:rar 有版权,有些东西没有公开,对解压有一些限制,即使其他解压包也可能有问题,但是建议尝试。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。