import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class CreateZip { /** * @param args */ public static void main(String[] args) throws IOException { File buildfolder = new File(".").getAbsoluteFile(); createZipOfBuildDir(buildfolder); } public static void createZipOfBuildDir(File buildfolder) throws IOException { for (File f:buildfolder.listFiles()) { if (f.isDirectory() && f.listFiles().length == 1) { File dir = f.listFiles()[0]; System.out.println("Creating new Zipfile of: "+dir.getPath()); setExecutableExecutable(dir); createZipOfDir(dir); } } } private static void setExecutableExecutable(File parentFolder) { String executableName= PackAndUpload.get("executableName"); for (File f: parentFolder.listFiles()) { if (f.isFile() && f.getName().equals(executableName)) { boolean success=f.setExecutable(true, false); System.out.println("set executable: "+f); } } } private static void createZipOfDir(File dir) throws IOException { File zipFile = new File(dir.getParentFile().getParentFile(),dir.getName()+"."+dir.getParentFile().getName()+".zip"); System.out.println("creating zipfile: "+zipFile); ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile)); out.setLevel(9); rekzipDir(out,dir,dir); out.close(); System.out.println("finished"); } private static void rekzipDir(ZipOutputStream zip,File parentFolder,File folder) throws IOException { for (File f:folder.listFiles()) { if (f.isFile()) { addFile(zip,parentFolder,f); } if (f.isDirectory()) { rekzipDir(zip,parentFolder,f); } } } private static void addFile(ZipOutputStream zip,File parentFolder,File file) throws IOException{ String relativename = file.getPath().substring(parentFolder.getParent().length()+1); System.out.println("adding: "+relativename); byte[] buf = new byte[1024]; FileInputStream in = new FileInputStream(file); // Add ZIP entry to output stream. ZipEntry ze = new ZipEntry(relativename); ze.setSize(file.length()); zip.putNextEntry(ze); // Transfer bytes from the file to the ZIP file int len; while ((len = in.read(buf)) > 0) { zip.write(buf, 0, len); } // Complete the entry zip.closeEntry(); in.close(); } }