一篇关于zip包的解压缩,支持目录嵌套和文件目录的中文名,也算补上上次的只压不解,(注意先倒入ant.jar这个包,同时要确认ant.jar包中有org.apache.tools.zip):
import java.io.*; public class DeCompressBook { public DeCompressBook() { }
private void createDirectory(String directory, String subDirectory) { String dir[]; File fl = new File(directory); try { if (subDirectory == "" && fl.exists() != true) fl.mkdir(); else if (subDirectory != "") { dir = subDirectory.replace('\\', '/').split("/"); for (int i = 0; i < dir.length; i++) { File subFile = new File(directory + File.separator + dir[i]); if (subFile.exists() == false) subFile.mkdir(); directory += File.separator + dir[i]; } } } catch (Exception ex) { System.out.println(ex.getMessage()); } }
public void unZip(String zipFileName, String outputDirectory) throws Exception { try { org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile(zipFileName); java.util.Enumeration e = zipFile.getEntries(); org.apache.tools.zip.ZipEntry zipEntry = null; createDirectory(outputDirectory, ""); while (e.hasMoreElements()) { zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement(); System.out.println("unziping " + zipEntry.getName()); if (zipEntry.isDirectory()) { String name = zipEntry.getName(); name = name.substring(0, name.length() - 1); File f = new File(outputDirectory + File.separator + name); f.mkdir(); System.out.println("创建目录:" + outputDirectory + File.separator + name); } else { String fileName = zipEntry.getName(); fileName = fileName.replace('\\', '/'); // System.out.println("测试文件1:" +fileName); if (fileName.indexOf("/") != -1) { createDirectory(outputDirectory, fileName.substring(0, fileName.lastIndexOf("/"))); fileName=fileName.substring(fileName.lastIndexOf("/")+1,fileName.length()); }
File f = new File(outputDirectory + File.separator + zipEntry.getName());
f.createNewFile(); InputStream in = zipFile.getInputStream(zipEntry); FileOutputStream out=new FileOutputStream(f);
byte[] by = new byte[1024]; int c; while ( (c = in.read(by)) != -1) { out.write(by, 0, c); } out.close(); in.close(); } } } catch (Exception ex) { System.out.println(ex.getMessage()); } } } |