java解压zip,rar的代码
程序员文章站
2022-04-02 19:24:13
...
通过java实现解压zip,rar的代码。
原创不易,转载请注明出处:java解压zip,rar的代码
package com.zuidaima.util.unzip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import com.github.junrar.Archive; import com.github.junrar.exception.RarException; import com.github.junrar.rarfile.FileHeader; public class Main { public void extractZipFiles() { String root = "c:/javazip/"; URL url = Main.class.getResource("/aa.zip"); String filename = url.getFile(); try { // destination folder to extract the contents byte[] buf = new byte[1024]; ZipInputStream zipinputstream = null; ZipEntry zipentry; zipinputstream = new ZipInputStream(new FileInputStream(filename)); zipentry = zipinputstream.getNextEntry(); while (zipentry != null) { // for each entry to be extracted String entryName = zipentry.getName(); System.out.println(entryName); int n; FileOutputStream fileoutputstream; File newFile = new File(entryName); String directory = newFile.getParent(); // to creating the parent directories if (directory == null) { if (newFile.isDirectory()) { break; } } else { new File(root + directory).mkdirs(); } if (!zipentry.isDirectory()) { System.out.println("File to be extracted....." + entryName); fileoutputstream = new FileOutputStream(root + entryName); while ((n = zipinputstream.read(buf, 0, 1024)) > -1) { fileoutputstream.write(buf, 0, n); } fileoutputstream.close(); } zipinputstream.closeEntry(); zipentry = zipinputstream.getNextEntry(); } zipinputstream.close(); } catch (Exception e) { e.printStackTrace(); } } public void extractRarFiles() { URL url = Main.class.getResource("/bb.rar"); String filename = url.getFile(); File archive = new File(filename); File destination = new File("c:/javazip/"); Archive arch = null; try { arch = new Archive(archive); } catch (RarException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } if (arch != null) { if (arch.isEncrypted()) { System.out.println("archive is encrypted cannot extreact"); return; } FileHeader fh = null; while (true) { fh = arch.nextFileHeader(); if (fh == null) { break; } if (fh.isEncrypted()) { System.out.println("file is encrypted cannot extract: " + fh.getFileNameString()); continue; } System.out.println("extracting: " + fh.getFileNameString()); try { if (fh.isDirectory()) { createDirectory(fh, destination); } else { File f = createFile(fh, destination); OutputStream stream = new FileOutputStream(f); arch.extractFile(fh, stream); stream.close(); } } catch (Exception e) { e.printStackTrace(); } } } } private File createFile(FileHeader fh, File destination) { File f = null; String name = null; if (fh.isFileHeader() && fh.isUnicode()) { name = fh.getFileNameW(); } else { name = fh.getFileNameString(); } f = new File(destination, name); if (!f.exists()) { try { f = makeFile(destination, name); } catch (IOException e) { e.printStackTrace(); } } return f; } private File makeFile(File destination, String name) throws IOException { String[] dirs = name.split("\\\\"); if (dirs == null) { return null; } String path = ""; int size = dirs.length; if (size == 1) { return new File(destination, name); } else if (size > 1) { for (int i = 0; i < dirs.length - 1; i++) { path = path + File.separator + dirs[i]; new File(destination, path).mkdir(); } path = path + File.separator + dirs[dirs.length - 1]; File f = new File(destination, path); f.createNewFile(); return f; } else { return null; } } private void createDirectory(FileHeader fh, File destination) { File f = null; if (fh.isDirectory() && fh.isUnicode()) { f = new File(destination, fh.getFileNameW()); if (!f.exists()) { makeDirectory(destination, fh.getFileNameW()); } } else if (fh.isDirectory() && !fh.isUnicode()) { f = new File(destination, fh.getFileNameString()); if (!f.exists()) { makeDirectory(destination, fh.getFileNameString()); } } } private void makeDirectory(File destination, String fileName) { String[] dirs = fileName.split("\\\\"); if (dirs == null) { return; } String path = ""; for (String dir : dirs) { path = path + File.separator + dir; new File(destination, path).mkdir(); } } public static void main(String[] args) { Main main = new Main(); // extract zip main.extractZipFiles(); // extract rar main.extractRarFiles(); } }