nashorn/samples/unzip.js
changeset 30701 1a25e71187ff
equal deleted inserted replaced
30700:b60ef3a8b185 30701:1a25e71187ff
       
     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  */
       
    31 
       
    32 /*
       
    33  * Simple unzip tool using #nashorn and #java
       
    34  * zip fs file system interface.
       
    35  */
       
    36  
       
    37 if (arguments.length == 0) {
       
    38     print("Usage: jjs zipfs.js -- <.zip/.jar file> [out dir]");
       
    39     exit(1);
       
    40 }
       
    41  
       
    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 }
       
    53  
       
    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");
       
    57  
       
    58 var zipfile = Paths.get(arguments[0])
       
    59 var fs = FileSystems.newFileSystem(zipfile, null);
       
    60 var root = fs.rootDirectories[0];
       
    61  
       
    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 );
       
    77  
       
    78 // done
       
    79 fs.close();