From 66db1d15cf5d4b51a346a42b66f0505bd7f31ce0 Mon Sep 17 00:00:00 2001 From: whycxzp <glperry@163.com> Date: 星期三, 03 一月 2024 15:23:47 +0800 Subject: [PATCH] 解压 --- src/main/java/com/whyc/util/FileUtil.java | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 170 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/whyc/util/FileUtil.java b/src/main/java/com/whyc/util/FileUtil.java index e22eb6e..ba1fcde 100644 --- a/src/main/java/com/whyc/util/FileUtil.java +++ b/src/main/java/com/whyc/util/FileUtil.java @@ -1,11 +1,18 @@ package com.whyc.util; +import com.github.junrar.Archive; +import com.github.junrar.exception.RarException; +import com.github.junrar.rarfile.FileHeader; +import org.apache.commons.compress.archivers.ArchiveEntry; +import org.apache.commons.compress.archivers.ArchiveException; +import org.apache.commons.compress.archivers.ArchiveInputStream; +import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; -import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; public class FileUtil { @@ -28,6 +35,32 @@ if (fileTemp.isDirectory()){ //閫掑綊鍐嶆杩涜鍒ゆ柇 getStaticFilePath(fileTemp, list); + }else{ + //瀛愮骇鏄枃浠� + String absolutePath = fileTemp.getAbsolutePath(); + list.add(absolutePath); + //System.out.println(temp + "鏂囦欢 :" + fileTemp.getName() + "\t"); + } + } + } + return list; + } + + public static List<String> getStaticFilePathII(File file, List<String> list){ + + //濡傛灉鏄枃浠剁殑鎯呭喌 + if (file.isFile()){ + list.add(file.getAbsolutePath()); + }else{ + //濡傛灉鏄洰褰曠殑鎯呭喌 + //鍒涘缓涓�涓狥ile鏁扮粍鏉ュ瓨鍌ㄥ綋鍓嶇洰褰曚笅鎵�鏈夋枃浠跺拰鐩綍鐨勭粷瀵硅矾寰� + File[] files = file.listFiles(); + //寰幆閬嶅巻files + for (File fileTemp : files){ + //瀛愮骇鏄洰褰� + if (fileTemp.isDirectory()){ + //閫掑綊鍐嶆杩涜鍒ゆ柇 + getStaticFilePathII(fileTemp, list); }else{ //瀛愮骇鏄枃浠� String absolutePath = fileTemp.getAbsolutePath(); @@ -126,10 +159,142 @@ } } + /** + * 瑙e帇N灞� + * @param compressedFileUrl doc_file/xxx/xxx.zip 鎴栬�� rar + * @return + */ + public static List<String> decompress(String compressedFileUrl) throws ArchiveException, IOException, RarException { + List<Object> resList = decompressOne(compressedFileUrl); + File outputFolderFile = (File) resList.get(0); + List<String> fileList = (List<String>) resList.get(1); + boolean existCompressedFile = false; + int checkDecompress = 0; + for(String tempFileName:fileList){ + if(tempFileName.endsWith("zip") || tempFileName.endsWith("rar")){ + decompressOne(tempFileName); + File file = new File(tempFileName); + file.delete(); + existCompressedFile = true; + } + } + if(existCompressedFile){ + checkDecompress ++; + } + for (int i = 0; i < checkDecompress; i++) { + decompress(compressedFileUrl); + } + + List<String> finalList = new LinkedList<>(); + getStaticFilePathII(outputFolderFile,finalList); + return finalList; + } + + /** + * 瑙e帇涓�灞� + * @param compressedFileUrl doc_file/xxx/xxx.zip 鎴栬�� rar + * @return + */ + public static List<Object> decompressOne(String compressedFileUrl) throws IOException, ArchiveException, RarException { + List<Object> resList = new LinkedList<>(); + String projectDir = CommonUtil.getProjectDir() + File.separator; + String fullFilePath; + String separator = File.separator; + String outputFolderSuffix; + if(compressedFileUrl.startsWith(projectDir)) { // 闈炵涓�灞傝В鍘�,宸茬粡鏄叏璺緞 + fullFilePath = compressedFileUrl; + compressedFileUrl = compressedFileUrl.substring(compressedFileUrl.indexOf("decompress")+11); + //outputFolderSuffix = compressedFileUrl.substring(0,compressedFileUrl.lastIndexOf(separator)) + separator + "decompress_" + compressedFileUrl.substring(compressedFileUrl.lastIndexOf(separator)+1); + outputFolderSuffix = compressedFileUrl +"_decompress"; + }else{ //绗竴灞傝В鍘� + fullFilePath = projectDir + compressedFileUrl; + outputFolderSuffix = compressedFileUrl.replace(separator, "@"); + } + File file = new File(fullFilePath); + + + String outputFolder = CommonUtil.getRootFile() + separator + "decompress" + separator + outputFolderSuffix; + File outputFolderFile = new File(outputFolder); + if(!outputFolderFile.exists()){ + outputFolderFile.mkdirs(); + if(compressedFileUrl.endsWith("zip")){ + decompressZip(file, outputFolder); + }else { //rar + decompressRar(file, outputFolder); + } + } + //杩斿洖鏂囦欢澶规墍鏈夋枃浠� + LinkedList<String> list = new LinkedList<>(); + getStaticFilePathII(outputFolderFile,list); + resList.add(outputFolderFile); + resList.add(list); + return resList; + } + + private static void decompressZip(File file, String outputFolder) throws IOException, ArchiveException { + ArchiveInputStream ais = new ArchiveStreamFactory().createArchiveInputStream("zip", new FileInputStream(file)); + ArchiveEntry entry; + while ((entry = ais.getNextEntry()) != null) { + if (!ais.canReadEntryData(entry) || entry.isDirectory()) { + continue; + } + byte[] buffer = new byte[4096]; + int bytesRead; + String entryName = entry.getName(); + //if(entryName.contains(File.separator)){ + if(entryName.contains("/")){ + String entryNameDir = entryName.substring(0, entryName.lastIndexOf("/")); + String entryDirStr = outputFolder + File.separator + entryNameDir; + File entryDir = new File(entryDirStr); + if(!entryDir.exists()){ + entryDir.mkdirs(); + } + } + + OutputStream outputStream = new FileOutputStream(new File(outputFolder + File.separator + entryName)); + + while ((bytesRead = ais.read(buffer)) > -1) { + outputStream.write(buffer, 0, bytesRead); + } + + outputStream.close(); + } + + } + + private static void decompressRar(File file, String outputFolder) throws IOException, RarException { + Archive archive = new Archive(file); + FileHeader fileHeader = archive.nextFileHeader(); + if (fileHeader != null) { + while (fileHeader != null) { + if (fileHeader.isDirectory()) { + fileHeader = archive.nextFileHeader(); + continue; + } + String tempFilePath = fileHeader.getFileName(); + File out = new File(outputFolder + File.separator + tempFilePath); + 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(); + + } + public static void main(String[] args) { - File file = new File("C:\\Users\\29550\\Desktop\\褰撳墠椤圭洰\\202207娉板窞骞冲彴"); - List list = new ArrayList<>(); - list = getStaticFilePath( file,list); - System.out.println(list); + //File file = new File("C:\\Users\\29550\\Desktop\\AppScan10.rar"); + File file = new File("C:\\code\\web\\CadDrawManager\\target\\doc_file\\decompress\\doc_file@product@FBS-9600-GDPDX-XS1-DC220V-JH@standard@3@3++.rar"); + if(file.exists()) { + boolean delete = file.delete(); + System.out.println(delete); + } } } -- Gitblit v1.9.1