View Javadoc
1   package org.codehaus.plexus.compiler.csharp;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.io.InputStream;
6   import java.io.OutputStream;
7   import java.nio.file.Files;
8   import java.nio.file.Path;
9   import java.util.Enumeration;
10  import java.util.jar.JarEntry;
11  import java.util.jar.JarFile;
12  
13  public class JarUtil {
14      public static void extract(Path destDir, File jarFile) throws IOException {
15          Path toPath = destDir.normalize();
16          try (JarFile jar = new JarFile(jarFile)) {
17              Enumeration<JarEntry> enumEntries = jar.entries();
18              while (enumEntries.hasMoreElements()) {
19                  JarEntry file = enumEntries.nextElement();
20                  Path f = destDir.resolve(file.getName());
21                  if (!f.startsWith(toPath)) {
22                      throw new IOException("Bad zip entry");
23                  }
24                  if (file.isDirectory()) {
25                      Files.createDirectories(f);
26                      continue;
27                  }
28                  try (InputStream is = jar.getInputStream(file);
29                          OutputStream fos = Files.newOutputStream(f)) {
30                      while (is.available() > 0) {
31                          fos.write(is.read());
32                      }
33                  }
34              }
35          }
36      }
37  }