ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Java里解压zip和rar包

2026/8/10 19:47:16 拓冰建站 浏览量
Java里解压zip和rar包

zip的解压提供了一种方法,
rar的解压提供了两种方法,第一种方法是调用命令调用主机安装的解压缩工具,
第二种方法,需要注意一下,需要导一个包

<dependency><groupId>com.github.junrar</groupId><artifactId>junrar</artifactId><version>4.0.0</version>
</dependency>

并且第二种方法,截至2023年,只支持rar4以下版本的解压,rar5的版本不支持,以后会不会有更新,就不知道了。
在这里插入图片描述

try{File file = new File(filePath);if(file.getName().endsWith(".zip")){ZipInputStream zis = new ZipInputStream(new FileInputStream(file), Charset.forName("GBK"));byte[] buffer = new byte[1024];ZipEntry ze;while ((ze = zis.getNextEntry()) != null) {String entryName = ze.getName();File extractedFile = new File(ceShiFilePath + entryName);if (ze.isDirectory()) {extractedFile.mkdirs();} else{FileOutputStream fos = new FileOutputStream(extractedFile);int len;while ((len = zis.read(buffer)) > 0) {fos.write(buffer, 0, len);}fos.close();fileList.add(extractedFile);}}zis.closeEntry();}else if(file.getName().endsWith(".rar")){String cmd = "D:\\tools\\zip\\UnRAR.exe";//cmd命令String unrarCmd = cmd + " x -r -p- -o+ " + file.getAbsolutePath() + " "+ ceShiFilePath;Runtime rt = Runtime.getRuntime();//调用程序UnRAR解压程序(Windows)Process pre = rt.exec(unrarCmd);//防止文件乱码InputStreamReader isr = new InputStreamReader(pre.getInputStream(),"GBK");BufferedReader bf = new BufferedReader(isr);String line = null;while ((line = bf.readLine()) != null) {line = line.trim();if ("".equals(line)) {continue;}}bf.close();pre.destroy();}else if(file.getName().endsWith(".rar")){Archive archive = new Archive(new FileInputStream(file));List<FileHeader> fileHeaders = archive.getFileHeaders();for (FileHeader fileHeader : fileHeaders) {if (fileHeader.isDirectory()) {File dir = new File(ceShiFilePath + fileHeader.getFileNameString());if (!dir.exists()){dir.mkdirs();}} else {String fileName=  fileHeader.getFileNameW().trim();File subFile = new File(ceShiFilePath + fileName);if (!subFile.exists()) {if (!subFile.getParentFile().exists()) {subFile.getParentFile().mkdirs();}subFile.createNewFile();}FileOutputStream os = new FileOutputStream(subFile);archive.extractFile(fileHeader, os);os.close();fileList.add(subFile);}}archive.close();}for(File file111 : fileList){System.out.println(file111.getAbsolutePath());}}catch (Exception ex){ex.printStackTrace();log.error(ex.getMessage());}

都是亲测可用的。