samples/unzip.js

Fri, 05 Jun 2015 12:38:53 +0200

author
mhaupt
date
Fri, 05 Jun 2015 12:38:53 +0200
changeset 1398
2f1b9f4daec1
parent 1372
644d9b9c97ed
permissions
-rw-r--r--

8080087: Nashorn $ENV.PWD is originally undefined
Summary: On Windows, the PWD environment variable does not exist and cannot be imported in scripting mode, so it is set explicitly.
Reviewed-by: lagergren, sundar

     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(); 

mercurial