一、说明

rar格式的压缩包收费,java支持zip格式的压缩和解压

二、工具类

import java.io.*;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipUtils {
private static final int BUFFER_SIZE = 2 * 1024;
/**
* zip解压
* @param srcFile zip源文件
* @param destDirPath 解压后的目标文件夹
* @throws RuntimeException 解压失败会抛出运行时异常
*/
public static void unZip(File srcFile, String destDirPath) throws RuntimeException {
long start = System.currentTimeMillis();
// 判断源文件是否存在
if (!srcFile.exists()) {
throw new RuntimeException(srcFile.getPath() + "所指文件不存在");
}
// 开始解压
ZipFile zipFile = null;
try {
zipFile = new ZipFile(srcFile);
Enumeration<?> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
System.out.println("解压" + entry.getName());
// 如果是文件夹,就创建个文件夹
if (entry.isDirectory()) {
String dirPath = destDirPath + "/" + entry.getName();
File dir = new File(dirPath);
dir.mkdirs();
} else {
// 如果是文件,就先创建一个文件,然后用io流把内容copy过去
File targetFile = new File(destDirPath + "/" + entry.getName());
// 保证这个文件的父文件夹必须要存在
if(!targetFile.getParentFile().exists()){
targetFile.getParentFile().mkdirs();
}
targetFile.createNewFile();
// 将压缩文件内容写入到这个文件中
InputStream is = zipFile.getInputStream(entry);
FileOutputStream fos = new FileOutputStream(targetFile);
int len;
byte[] buf = new byte[BUFFER_SIZE];
while ((len = is.read(buf)) != -1) {
fos.write(buf, 0, len);
}
// 关流顺序,先打开的后关闭
fos.close();
is.close();
}
}
long end = System.currentTimeMillis();
System.out.println("解压完成,耗时:" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("unzip error from ZipUtils", e);
} finally {
if(zipFile != null){
try {
zipFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
} /**
* 压缩成ZIP 方法
* @param srcFiles 需要压缩的文件列表
* @param out 压缩文件输出流
* @throws RuntimeException 压缩失败会抛出运行时异常
*/
public static void toZip(List<File> srcFiles , OutputStream out)throws Exception {
long start = System.currentTimeMillis();
ZipOutputStream zos = null ;
try {
zos = new ZipOutputStream(out);
for (File srcFile : srcFiles) {
byte[] buf = new byte[BUFFER_SIZE];
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len;
FileInputStream in = new FileInputStream(srcFile);
while ((len = in.read(buf)) != -1){
zos.write(buf, 0, len);
}
zos.closeEntry();
in.close();
}
long end = System.currentTimeMillis();
System.out.println("压缩完成,耗时:" + (end - start) +" ms");
} catch (Exception e) {
throw new RuntimeException("zip error from ZipUtils",e);
}finally{
if(zos != null){
try {
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

三、使用工具类压缩和解压文件

import com.szfore.utils.ZipUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List; public class TestZip { public static void main(String[] args) throws Exception{
//testToZip();
testUnzip();
} /**
* 测试压缩文件
*/
public static void testToZip() throws Exception {
File file1 = new File("c:\\1.txt");
File file2 = new File("c:\\2.txt");
List<File> files = new ArrayList<File>();
files.add(file1);
files.add(file2);
OutputStream out = new FileOutputStream("c:\\1.zip");
ZipUtils.toZip(files,out);
} /**
* 测试解压文件
* @throws Exception
*/
public static void testUnzip() throws Exception{
File srcFile = new File("c:\\2.zip");
String destDirPath = "c:\\";
ZipUtils.unZip(srcFile,destDirPath);
}
}

最新文章

  1. (一)sql入门 导读
  2. 数据库模型设计&mdash;&mdash;历史与版本设计
  3. C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)
  4. centos性能监控系列一:常用监控命令
  5. spring的事务回滚
  6. SQL存储过程相关信息查看转
  7. iOS: 填充数据表格
  8. lua 中操作系统库
  9. C# 6 与 .NET Core 1.0 高级编程 - C# 6 改进
  10. BZOJ 3926: [Zjoi20150]诸神眷顾的幻想乡(后缀自动机)
  11. 关于 Java 面试,你应该准备这些知识点
  12. 使用SimpleDateFormat类来实现时间跟字符串的转化
  13. Luogu P2770 航空路线问题
  14. Script error.深度测试
  15. PLSQL Developer的使用之对象浏览器
  16. 在远程连接一个 Wndows 10的情况下,重启远程机器
  17. Leetcode 763. Partition Labels
  18. MyEclipse部署项目到Tomcat上,但是classes文件夹下没有编译项目
  19. CentOS7.6离线安装Tomcat8.5
  20. react native组件的生命周期

热门文章

  1. 往element 模块里面渲染数据
  2. linux权限管理-基本权限
  3. LOBs and ORA-01555 troubleshooting (Doc ID 846079.1)
  4. .htaccess设置301跳转及常用技巧整理
  5. Linux:使用LVM进行磁盘管理
  6. c语言程序设计第1章
  7. JDOJ1100: Fix
  8. c# WF 第11节 RichTextBox
  9. 毕业设计代做,各种系统微服务项目ssm项目,员工管理系统,微信小程序,购物商城,二手商城系统,销售系统,等等
  10. fis3 相关