13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypackage com.mot.dm.tool; 23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.io.*; 43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.zip.*; 53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyimport java.util.Enumeration; 63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambypublic class Zip { 83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private final int BUFFER = 1024; 93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private String topPath; 103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public void zip(String inputDir, String outputFile) throws Exception { 123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File input = new File(inputDir); 133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!input.exists()) { 153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby throw new Exception("Input directory doesn't exist: " + inputDir); 163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby else if (!input.isDirectory()) { 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby throw new Exception("Input file doesn't directory: " + inputDir); 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File output = new File(outputFile); 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!output.getName().toUpperCase().endsWith(".ZIP")) { 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby throw new Exception("Output file is not zip: " + outputFile); 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!output.exists()) { 263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File parentDir = output.getParentFile(); 273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (parentDir != null && !parentDir.exists()) { 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby parentDir.mkdirs(); 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby FileOutputStream dest = new FileOutputStream(output); 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest)); 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby topPath = input.getParentFile().getAbsolutePath() + File.separator; 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby addFileToZip(input, out); 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby parseDirectory(input, out); 373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File files[] = input.listFiles(); 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby for (int i = 0; i < files.length; i++) { 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (files[i].isDirectory()) { 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby addFileToZip(files[i], out); 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby parseDirectory(files[i], out); 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby else { 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby addFileToZip(files[i], out); 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby out.close(); 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public void unzip(String zipFilePath, String outputDir) throws Exception { 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby BufferedOutputStream dest = null; 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby BufferedInputStream is = null; 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ZipEntry entry; 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ZipFile zipfile = new ZipFile(zipFilePath); 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Enumeration e = zipfile.entries(); 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby while (e.hasMoreElements()) { 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby entry = (ZipEntry) e.nextElement(); 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Util.verbose("Extracting: " + entry); 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby is = new BufferedInputStream(zipfile.getInputStream(entry)); 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby int count; 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby byte data[] = new byte[BUFFER]; 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby outputDir += 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby (outputDir.length() > 0 && !outputDir.endsWith(File.separator)) ? 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby "/" : ""; 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File newFile = new File(outputDir + entry); 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (entry.isDirectory()) { 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!newFile.exists()) { 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby newFile.mkdirs(); 793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby else { 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File parent = newFile.getParentFile(); 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (parent != null && !parent.exists()) { 843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby parent.mkdirs(); 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby FileOutputStream fos = new FileOutputStream(newFile.getAbsolutePath()); 893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby dest = new BufferedOutputStream(fos, BUFFER); 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby while ( (count = is.read(data, 0, BUFFER)) != -1) { 913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby dest.write(data, 0, count); 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby dest.flush(); 943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby dest.close(); 953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby is.close(); 963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby catch (Exception ee) { 983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby//ee.printStackTrace(); 993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private void parseDirectory(File dir, ZipOutputStream out) throws Exception { 1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby File files[] = dir.listFiles(); 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby for (int i = 0; i < files.length; i++) { 1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (files[i].isDirectory()) { 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby addFileToZip(files[i], out); 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby parseDirectory(files[i], out); 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby else { 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby addFileToZip(files[i], out); 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby private void addFileToZip(File file, ZipOutputStream out) throws Exception { 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby BufferedInputStream origin = null; 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby byte data[] = new byte[BUFFER]; 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Util.verbose("Adding: " + file); 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby String zipEntryName = file.getAbsolutePath(); 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby zipEntryName = Util.replaceStr(zipEntryName, topPath, ""); 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby zipEntryName = Util.replaceStr(zipEntryName, "\\", "/"); 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (file.isDirectory() && !zipEntryName.endsWith("/")) { 1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby zipEntryName += "/"; 1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ZipEntry entry = new ZipEntry(zipEntryName); 1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby out.putNextEntry(entry); 1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (file.isFile()) { 1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby FileInputStream fi = new FileInputStream(file); 1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby origin = new BufferedInputStream(fi, BUFFER); 1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby int count; 1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby while ( (count = origin.read(data, 0, BUFFER)) != -1) { 1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby out.write(data, 0, count); 1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby origin.close(); 1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby public static void main(String[] args) { 1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby try { 1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (args.length != 3) { 1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby System.out.println("Wrong arguments"); 1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMTSTool.usage(true); 1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby System.exit( -1); 1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Util.VERBOSE = true; 1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby Zip zip = new Zip(); 1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(args[0].equals("-zip")){ 1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby zip.zip(args[1], args[2]); 1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby else if(args[0].equals("-unzip")){ 1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby zip.unzip(args[1], args[2]); 1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby else{ 1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby System.out.println("Wrong arguments"); 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMTSTool.usage(true); 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby System.exit(-1); 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby catch (Exception e) { 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby e.printStackTrace(); 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby //z.zip("I:\\tmp\\Dmt", "R_NewZIP.zip"); 1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // z.unzip("NewZIP.zip", ""); 1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // z.unzip("D:/Profiles/E32569/jbproject/Dmt.zip", ""); 1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // z.unzip("I:/tmp/Dmt.zip", ""); 1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby // z.unzip("D:/Profiles/E32569/jbproject/Dmt.zip", "D:\\Profiles\\E32569\\jbproject\\XML2WBXMLPrj\\tmp_1129935212004\\2"); 1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 175