2021年7月14日星期三

java 压缩包 遍历解压 zip 和 7z 指定格式文件

import lombok.extern.slf4j.Slf4j;import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;import org.apache.commons.compress.archivers.sevenz.SevenZFile;import java.io.*;import java.nio.charset.Charset;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.util.Enumeration;import java.util.concurrent.*;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;/** * zip文件解压 * @author fhadmin * @from www.fhadmin.cn */@Slf4jpublic class ZipUtils { public static void main(String[] args) throws IOException {//  ZipHandler zipHandler = new ZipHandler();//  zipHandler.decompress("F:/test.zip", "F:/test/");  String filePath = "C:\\Users\\260481\\Desktop\\1ORIGIN_DATA_LIST_1610090555026_spark9.zip";  File fil = new File(filePath);  InputStream fileInputStream = new FileInputStream(fil);  Path path = Paths.get("business","src", "main", "resources", "static", "1ORIGIN_DATA_LIST_1610615443346_测试.zip");  File file1 = path.getParent().toFile();  if (!file1.exists()){   file1.mkdirs();  }  Files.copy(fileInputStream,path);  File file = path.toFile();  ZipUtils zipHandler = new ZipUtils();  Path path1 = Paths.get("business","src", "main", "resources", "static");  zipHandler.decompress(file,path1.toString()); }//解压方法 public void decompress(File srcFile, String destDirPath){  //判断是zip格式 还是 7z格式  if (srcFile.getName().toLowerCase().endsWith(".zip")){    try {     decompressZIP(srcFile, destDirPath);    } catch (IOException e) {     e.printStackTrace();    }  }else if (srcFile.getName().toLowerCase().endsWith(".7z")){    try {     decompress7Z(srcFile, destDirPath);    } catch (Exception e) {     e.printStackTrace();    }  }//解压完成后,删除压缩包方法,以及空文件夹  File parentFile = srcFile.getParentFile();  boolean delete = srcFile.delete();  if (!delete){   log.error("删除文件"+srcFile.getName()+"失败");  }  if (parentFile.isDirectory() && (parentFile.listFiles() == null || parentFile.listFiles().length<=0)){   log.info("删除文件夹"+parentFile.getName()+parentFile.delete());  } } private void decompress7Z(File srcFile, String destDirPath) throws Exception {  /**   * zip解压   * @param inputFile 待解压文件名   * @param destDirPath 解压路径   *///  File srcFile = new File(inputFile);//获取当前压缩文件  // 判断源文件是否存在  if (!srcFile.exists()) {   throw new Exception(srcFile.getPath() + "所指文件不存在");  }  //开始解压  long start = System.currentTimeMillis();  SevenZFile zIn = new SevenZFile(srcFile);  SevenZArchiveEntry entry = null;  File file = null;  while ((entry = zIn.getNextEntry()) != null) {   if (!entry.isDirectory()) {    String name = entry.getName();        file = new File(destDirPath, name);    saveFile(zIn, file,destDirPath);   }  }  zIn.close();  long end = System.currentTimeMillis();  log.info("解压"+srcFile.getName()+"耗时"+(end-start)+"毫秒"); } private void saveFile(SevenZFile zIn, File file, String destDirPath) {  String toLowerCase = file.getName().toLowerCase();  //校验文件后缀  if (!file.exists() && (verifySuffix(toLowerCase) || toLowerCase.endsWith(".zip")|| toLowerCase.endsWith(".7z"))) {   new File(file.getParent()).mkdirs();//创建此文件的上级目录   try(OutputStream out = new FileOutputStream(file);    BufferedOutputStream bos = new BufferedOutputStream(out);) {    int len = -1;    byte[] buf = new byte[1024];    while ((len = zIn.read(buf)) != -1) {     bos.write(buf, 0, len);    }   } catch (IOException e) {    log.error(file.getName() + "文件创建失败");   }   if (file.getName().endsWith(".7z") || file.getName().endsWith(".zip")){    try {     decompress(file, destDirPath);//       boolean delete = file.delete();//       System.out.println("文件删除"+delete);    } catch (Exception e) {     e.printStackTrace();    }   }  } else {//   file = new File(file.getParent(), "(1)" + file.getName());//   saveFile(zIn, file, destDirPath);  } } private void decompressZIP(File file, String destPath) throws IOException {  long start = System.currentTimeMillis();  ZipFile zipFile = new ZipFile(file, Charset.forName("GBK"));  Enumeration<? extends ZipEntry> entries = zipFile.entries();  //使用线程池 提交任务 没有工具类 可自己new  ExecutorService threadPool = ThreadPoolUtil.getInstance();  int size = zipFile.size();  final CountDownLatch countDownLatch = new CountDownLatch(size);  while (entries.hasMoreElements()) {   ZipEntry zipEntry = entries.nextElement();   if (zipEntry.isDirectory()) {    countDownLatch.countDown();    continue;   }   threadPool.execute(new FileWritingTask(zipFile,destPath,zipEntry,countDownLatch));  }//  threadPool.shutdown();  try {//   threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);  countDownLatch.await();  } catch (InterruptedException e) {   e.printStackTrace();  }  zipFile.close();  long end = System.currentTimeMillis();  log.info("解压"+file.getName()+"耗时"+(end-start)+"毫秒");//  boolean delete = file.delete();//  if (!delete){//   log.error("删除文件"+file.getName()+"失败");//  } } public static boolean verifySuffix(String name) {  String lowerCase = name.toLowerCase();  if (lowerCase.endsWith(".jpg") || lowerCase.endsWith(".jpeg") || lowerCase.endsWith(".png") || lowerCase.endsWith(".bmp")){   return true;  }else {   return false;  } } private c......

原文转载:http://www.shaoqun.com/a/875495.html

跨境电商:https://www.ikjzd.com/

邮乐购物商城:https://www.ikjzd.com/w/1776

google correlate:https://www.ikjzd.com/w/1887

邮乐网购物商城:https://www.ikjzd.com/w/1776


importlombok.extern.slf4j.Slf4j;importorg.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;importorg.apache.commons.compress.archivers.sevenz.SevenZFile;importjava.io.*;importjava.nio.chars
去福建永定土楼旅游住哪里呢?:http://www.30bags.com/a/403380.html
去甘南旅游什么时间比较好?:http://www.30bags.com/a/415079.html
去港澳旅游需要办理什么证件?:http://www.30bags.com/a/404511.html
去港澳旅游需要什么证件?:http://www.30bags.com/a/404896.html
我想㖭你腿间的花 乖乖宝贝让我爽一下:http://lady.shaoqun.com/a/247516.html
男朋友在车里㖭比过程 放在里面一整天:http://lady.shaoqun.com/m/a/247920.html
㖭我下面开车 在颠簸的路上一进一出:http://www.30bags.com/m/a/249936.html
校花让我玩她的大白兔 手伸进她的乳罩里揉搓着:http://www.30bags.com/m/a/249792.html
英国TikTok Shop对中国卖家开放了!是机遇还是天坑?:https://www.ikjzd.com/articles/146606
这个婴儿是谁生的?工作中最科学的母子是谁?:http://lady.shaoqun.com/a/420121.html
深圳适合小学生玩的地方有哪些:http://www.30bags.com/a/500636.html
吸引"多金优质男"的正确方法不是"装名人\:http://lady.shaoqun.com/a/420122.html

没有评论:

发表评论