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
2021年7月14日星期三
java 压缩包 遍历解压 zip 和 7z 指定格式文件
订阅:
博文评论 (Atom)
没有评论:
发表评论