package se.chalmers.gdcn.taskbuilder.fileManagement; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; /** * Created by HalfLeif on 2014-05-29. */ public class JarExtractor { /** * Extracts a subdirectory of a jar file to a custom location. * * @param jar jar file to extract from * @param subDir subDir of jar to extract * @param targetDir Target directory to extract to */ public static void extract(File jar, String subDir, File targetDir) throws IOException { JarFile jarFile = new JarFile(jar); targetDir.mkdirs(); System.out.println("Target dir: "+targetDir); // System.out.println("exist? " + targetDir.exists()); Enumeration<JarEntry> entries = jarFile.entries(); while (entries.hasMoreElements()){ JarEntry entry = entries.nextElement(); String name = entry.getName(); if(! subDir.equals(name.split(File.separator)[0])){ continue; } // System.out.println("Entry: "+name); File targetFile = new File(targetDir + File.separator + name); if(entry.isDirectory()){ System.out.println("dir: "+name); targetFile.mkdir(); continue; } else { System.out.println("file: "+name); } InputStream inputStream = jarFile.getInputStream(entry); FileOutputStream fileOutputStream = new FileOutputStream(targetFile); while(inputStream.available() > 0){ fileOutputStream.write(inputStream.read()); } inputStream.close(); fileOutputStream.close(); } System.out.println("\nExtraction complete."); } }