package com.vip.saturn.job.plugin.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; /** * * @author xiaopeng.he * */ public class CommonUtils { private static final String fileSeparator = System.getProperty("file.separator"); public static boolean initSaturnHome() { File saturnHome = new File(System.getProperty("user.home") + fileSeparator + ".saturn"); saturnHome.mkdirs(); File saturnCaches = new File(saturnHome, "caches"); saturnCaches.mkdirs(); return saturnCaches.exists(); } public static File getSaturnHomeCaches() { return new File(System.getProperty("user.home") + fileSeparator + ".saturn" + fileSeparator + "caches"); } public static void unzip(File zip, File directory) throws ZipException, IOException { ZipFile zipFile = new ZipFile(zip); try { Enumeration<? extends ZipEntry> entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry zipEntry = entries.nextElement(); if (zipEntry.isDirectory()) { File temp = new File(directory + File.separator + zipEntry.getName()); temp.mkdirs(); continue; } BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(zipEntry)); File f = new File(directory + File.separator + zipEntry.getName()); File f_p = f.getParentFile(); if (f_p != null && !f_p.exists()) { f_p.mkdirs(); } BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f)); int len = -1; byte[] bs = new byte[2048]; while ((len = bis.read(bs, 0, 2048)) != -1) { bos.write(bs, 0, len); } bos.flush(); bos.close(); bis.close(); } } finally { zipFile.close(); } } public static void zip(List<File> runtimeLibFiles, File saturnContainerDir, File zipFile) throws IOException { ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)); /* for(File file : saturnContainerDir.listFiles()) { zip(file, "saturn", zos); }*/ for(File file : runtimeLibFiles) { zip(file, "app"+fileSeparator+"lib", zos); } zos.close(); } private static void zip(File file, String parent, ZipOutputStream zos) throws IOException { if(file == null || !file.exists()) return; if(file.isFile()) { String entryName = parent == null ? file.getName() : parent + fileSeparator + file.getName(); zos.putNextEntry(new ZipEntry(entryName)); FileInputStream fis = new FileInputStream(file); int len = -1; byte[] bs = new byte[2048]; while ((len = fis.read(bs, 0, 2048)) != -1) { zos.write(bs, 0, len); } fis.close(); } else if(file.isDirectory()) { String entryName = parent == null ? file.getName() : parent + fileSeparator + file.getName(); zos.putNextEntry(new ZipEntry(entryName + "/")); File[] listFiles = file.listFiles(); if(listFiles != null) { for(File tmp : file.listFiles()) { zip(tmp, entryName, zos); } } } } }