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 }