From 6e4cf5045cb931cd375e5c7ee76cfe199a292890 Mon Sep 17 00:00:00 2001 From: whycxzp <glperry@163.com> Date: 星期三, 03 一月 2024 15:22:29 +0800 Subject: [PATCH] 解压 --- src/main/java/com/whyc/util/FileUtil.java | 117 ++++++++++++++++++++++++---------------------------------- 1 files changed, 48 insertions(+), 69 deletions(-) diff --git a/src/main/java/com/whyc/util/FileUtil.java b/src/main/java/com/whyc/util/FileUtil.java index 1f09e28..f5be120 100644 --- a/src/main/java/com/whyc/util/FileUtil.java +++ b/src/main/java/com/whyc/util/FileUtil.java @@ -164,7 +164,7 @@ * @param compressedFileUrl doc_file/xxx/xxx.zip 鎴栬�� rar * @return */ - public static List<String> decompress(String compressedFileUrl){ + 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); @@ -197,7 +197,7 @@ * @param compressedFileUrl doc_file/xxx/xxx.zip 鎴栬�� rar * @return */ - public static List<Object> decompressOne(String compressedFileUrl){ + public static List<Object> decompressOne(String compressedFileUrl) throws IOException, ArchiveException, RarException { List<Object> resList = new LinkedList<>(); String projectDir = CommonUtil.getProjectDir() + File.separator; String fullFilePath; @@ -233,83 +233,62 @@ return resList; } - public static String decompressT(File file){ - String fileName = file.getName(); - String outputFolder = "C:\\Users\\29550\\Desktop\\decompress" + File.separator + fileName; - File outputFolderFile = new File(outputFolder); - if(!outputFolderFile.exists()){ - outputFolderFile.mkdirs(); - } - if(fileName.endsWith("zip")){ - decompressZip(file, outputFolder); - }else { //rar - decompressRar(file, outputFolder); + 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(); } - return null; } - private static void decompressZip(File file, String outputFolder) { - try (ArchiveInputStream ais = new ArchiveStreamFactory().createArchiveInputStream("zip", new FileInputStream(file))) { - ArchiveEntry entry; - while ((entry = ais.getNextEntry()) != null) { - if (!ais.canReadEntryData(entry) || entry.isDirectory()) { + + 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; } - 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(); + String tempFilePath = fileHeader.getFileName(); + File out = new File(outputFolder + File.separator + tempFilePath); + if (!out.exists()) { + if (!out.getParentFile().exists()) { + out.getParentFile().mkdirs(); } + out.createNewFile(); } - - OutputStream outputStream = new FileOutputStream(new File(outputFolder + File.separator + entryName)); - - while ((bytesRead = ais.read(buffer)) > -1) { - outputStream.write(buffer, 0, bytesRead); - } - - outputStream.close(); + FileOutputStream os = new FileOutputStream(out); + archive.extractFile(fileHeader, os); + os.close(); + fileHeader = archive.nextFileHeader(); } - } catch (IOException | ArchiveException e) { - e.printStackTrace(); } - } + archive.close(); - private static void decompressRar(File file, String outputFolder) { - try { - - 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(); - } catch (IOException | RarException e) { - e.printStackTrace(); - } } public static void main(String[] args) { -- Gitblit v1.9.1