Mon, 09 Nov 2015 13:45:10 -0800
Merge
1 /*
2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * - Neither the name of Oracle nor the names of its
16 * contributors may be used to endorse or promote products derived
17 * from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
32 /*
33 * Simple unzip tool using #nashorn and #java
34 * zip fs file system interface.
35 */
37 if (arguments.length == 0) {
38 print("Usage: jjs zipfs.js -- <.zip/.jar file> [out dir]");
39 exit(1);
40 }
42 var File = Java.type("java.io.File");
43 // output directory where zip is extracted
44 var outDir = arguments[1];
45 if (!outDir) {
46 outDir = ".";
47 } else {
48 if (! new File(outDir).isDirectory()) {
49 print(outDir + " directory does not exist!");
50 exit(1);
51 }
52 }
54 var Files = Java.type("java.nio.file.Files");
55 var FileSystems = Java.type("java.nio.file.FileSystems");
56 var Paths = Java.type("java.nio.file.Paths");
58 var zipfile = Paths.get(arguments[0])
59 var fs = FileSystems.newFileSystem(zipfile, null);
60 var root = fs.rootDirectories[0];
62 // walk root and handle each Path
63 Files.walk(root).forEach(
64 function(p) {
65 var outPath = outDir +
66 p.toString().replace('/', File.separatorChar);
67 print(outPath);
68 if (Files.isDirectory(p)) {
69 // create directories as needed
70 new File(outPath).mkdirs();
71 } else {
72 // copy a 'file' resource
73 Files.copy(p, new File(outPath).toPath());
74 }
75 }
76 );
78 // done
79 fs.close();