admin 管理员组文章数量: 1087131
JAVA 7z Seven Zip 压缩和解压文件
JAVA 7z Seven Zip 压缩和解压文件
7-Zip是基于GNU LGPL协议发布的软件,通过全新算法使压缩比率大幅提升
本文主要讲解通过JAVA方式把文件压缩成7z文件和对7z文件进行解压操作
1 Maven依赖项:
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.19</version>
</dependency>
<dependency><groupId>org.tukaani</groupId><artifactId>xz</artifactId><version>1.8</version>
</dependency>
2 递归压缩和解压缩7z文件
压缩:使用SevenZOutputFile将文件或目录压缩为7z格式。
解压:使用SevenZFile类读取7z文件,然后,我们使用sevenZFile.getNextEntry()类循环遍历SevenZArchiveEntry,并将内容写入FileOutputStream。
package cn.rxzn.core.util;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;/**
* @Description: 7Z工具类
* @author qinglj
**/
public class SevenZip {private SevenZip() {}/***7Z 压缩* @param name 压缩后的文件路径(如 D:\SevenZip\test.7z)* @param files 需要压缩的文件*/public static void compress(String name, File... files) {try (SevenZOutputFile out = new SevenZOutputFile(new File(name))){for (File file : files){addToArchiveCompression(out, file, ".");}} catch (IOException e) {e.printStackTrace();}}/*** 解压7z文件* @param orgPath 源压缩文件地址* @param tarpath 解压后存放的目录地址*/public static void decompress(String orgPath, String tarpath) {try {SevenZFile sevenZFile = new SevenZFile(new File(orgPath));SevenZArchiveEntry entry = sevenZFile.getNextEntry();while (entry != null) {File file = new File(tarpath + File.separator + entry.getName());if (entry.isDirectory()) {if(!file.exists()) {file.mkdirs();}entry = sevenZFile.getNextEntry();continue;}if(!file.getParentFile().exists()) {file.getParentFile().mkdirs();}FileOutputStream out = new FileOutputStream(file);byte[] content = new byte[(int) entry.getSize()];sevenZFile.read(content, 0, content.length);out.write(content);out.close();entry = sevenZFile.getNextEntry();}sevenZFile.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}private static void addToArchiveCompression(SevenZOutputFile out, File file, String dir) {String name = dir + File.separator + file.getName();if(dir.equals(".")) {name = file.getName();}if (file.isFile()){SevenZArchiveEntry entry = null;FileInputStream in = null;try {entry = out.createArchiveEntry(file, name);out.putArchiveEntry(entry);in = new FileInputStream(file);byte[] b = new byte[1024];int count = 0;while ((count = in.read(b)) > 0) {out.write(b, 0, count);}} catch (IOException e) {e.printStackTrace();} finally {try {out.closeArchiveEntry();in.close();} catch (IOException e) {e.printStackTrace();}}} else if (file.isDirectory()) {File[] children = file.listFiles();if (children != null){for (File child : children){addToArchiveCompression(out, child, name);}}} else {System.out.println(file.getName() + " is not supported");}}
}
3 测试
测试代码如下,发现 7z 压缩速度确实比 zip 慢,但使用 7z 格式能比使用 zip 格式的压缩文件小 30-70%。
public static void main(String[] args) {System.out.println("压缩开始:" + System.currentTimeMillis());compress("D:\\Download\test.7z", new File("D:\\Download\\7z"));// decompress("D:\\Download\\test.7z", "D:\\Download\\new7z");System.out.println("压缩完成:" + System.currentTimeMillis());
}
4 参考资料
Java 7z Seven Zip Example – compress and decompress a file
本文标签: JAVA 7z Seven Zip 压缩和解压文件
版权声明:本文标题:JAVA 7z Seven Zip 压缩和解压文件 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687898716a154938.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论