test/jdk/jdk/nio/zipfs/Basic.java
author sherman
Wed, 03 Oct 2018 12:54:54 -0700
changeset 52008 6f04692c7d51
parent 48768 ac007e4bbf4b
child 53363 20a872899315
permissions -rw-r--r--
8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative Reviewed-by: alanb, lancea
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     1
/*
9035
1255eb81cc2f 7033660: Update copyright year to 2011 on any files changed in 2011
ohair
parents: 8165
diff changeset
     2
 * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     4
 *
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     7
 * published by the Free Software Foundation.
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     8
 *
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    13
 * accompanied this code).
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    14
 *
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    18
 *
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    21
 * questions.
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    22
 */
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    23
27565
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    24
import java.nio.file.AccessMode;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    25
import java.nio.file.ClosedFileSystemException;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    26
import java.nio.file.DirectoryStream;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    27
import java.nio.file.FileStore;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    28
import java.nio.file.FileSystem;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    29
import java.nio.file.FileSystems;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    30
import java.nio.file.FileVisitResult;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    31
import java.nio.file.Files;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    32
import java.nio.file.Path;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    33
import java.nio.file.Paths;
38568
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
    34
import java.nio.file.ProviderMismatchException;
27565
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    35
import java.nio.file.SimpleFileVisitor;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    36
import java.nio.file.StandardCopyOption;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    37
import java.nio.file.attribute.BasicFileAttributes;
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    38
import java.nio.file.spi.FileSystemProvider;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    39
import java.net.URI;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    40
import java.io.IOException;
27565
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    41
import java.util.Collections;
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    42
import java.util.Map;
38568
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
    43
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    44
/**
23925
0d5f2d863262 8038500: (zipfs) Upgrade ZIP provider to be a supported provider
sherman
parents: 9035
diff changeset
    45
 * @test
52008
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
    46
 * @bug 8038500 8040059 8150366 8150496 8147539 8211385
23925
0d5f2d863262 8038500: (zipfs) Upgrade ZIP provider to be a supported provider
sherman
parents: 9035
diff changeset
    47
 * @summary Basic test for zip provider
24364
da8afb112f5d 8040059: Change default policy for extensions to no permission
mchung
parents: 23925
diff changeset
    48
 *
48768
ac007e4bbf4b 8178342: Missing @modules in jdk/jdk/nio/zipfs
shurailine
parents: 47216
diff changeset
    49
 * @modules jdk.zipfs
24364
da8afb112f5d 8040059: Change default policy for extensions to no permission
mchung
parents: 23925
diff changeset
    50
 * @run main Basic
27260
8d82d0e9556b 8043277: Update jdk regression tests to extend the default security policy instead of override
mchung
parents: 24364
diff changeset
    51
 * @run main/othervm/java.security.policy=test.policy Basic
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    52
 */
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    53
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    54
public class Basic {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    55
    public static void main(String[] args) throws Exception {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    56
        // Test: zip should should be returned in provider list
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    57
        boolean found = false;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    58
        for (FileSystemProvider provider: FileSystemProvider.installedProviders()) {
7531
77870839c857 6989148: (fs) zip provider should be available "out of the box"
sherman
parents: 6699
diff changeset
    59
            if (provider.getScheme().equalsIgnoreCase("jar")) {
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    60
                found = true;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    61
                break;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    62
            }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    63
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    64
        if (!found)
7531
77870839c857 6989148: (fs) zip provider should be available "out of the box"
sherman
parents: 6699
diff changeset
    65
            throw new RuntimeException("'jar' provider not installed");
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    66
27565
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    67
        // create JAR file for test
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    68
        Path jarFile = Utils.createJarFile("basic.jar",
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    69
                "META-INF/services/java.nio.file.spi.FileSystemProvider");
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    70
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
    71
        // Test: FileSystems#newFileSystem(Path)
27565
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    72
        Map<String,?> env = Collections.emptyMap();
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    73
        FileSystems.newFileSystem(jarFile, null).close();
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    74
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    75
        // Test: FileSystems#newFileSystem(URI)
27565
729f9700483a 8049367: Modular Run-Time Images
chegar
parents: 27260
diff changeset
    76
        URI uri = new URI("jar", jarFile.toUri().toString(), null);
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    77
        FileSystem fs = FileSystems.newFileSystem(uri, env, null);
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    78
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    79
        // Test: exercise toUri method
7531
77870839c857 6989148: (fs) zip provider should be available "out of the box"
sherman
parents: 6699
diff changeset
    80
        String expected = uri.toString() + "!/foo";
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    81
        String actual = fs.getPath("/foo").toUri().toString();
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    82
        if (!actual.equals(expected)) {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    83
            throw new RuntimeException("toUri returned '" + actual +
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    84
                "', expected '" + expected + "'");
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    85
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    86
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    87
        // Test: exercise directory iterator and retrieval of basic attributes
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    88
        Files.walkFileTree(fs.getPath("/"), new FileTreePrinter());
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    89
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    90
        // Test: DirectoryStream
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    91
        found = false;
52008
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
    92
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
    93
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(fs.getPath("/"))) {
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    94
            for (Path entry: stream) {
38568
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
    95
                found = entry.toString().equals("/META-INF");
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    96
                if (found) break;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    97
            }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    98
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
    99
        if (!found)
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   100
            throw new RuntimeException("Expected file not found");
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   101
52008
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   102
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(fs.getPath("META-INF"))) {
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   103
            for (Path entry: stream) {
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   104
                if (entry.toString().equals("/META-INF/services"))
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   105
                    throw new RuntimeException("child path should be relative");
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   106
            }
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   107
        }
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   108
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   109
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(fs.getPath("/META-INF"))) {
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   110
            for (Path entry: stream) {
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   111
                if (entry.toString().equals("META-INF/services"))
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   112
                    throw new RuntimeException("child path should be absolute");
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   113
            }
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   114
        }
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   115
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   116
        // Test: copy file from zip file to current (scratch) directory
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   117
        Path source = fs.getPath("/META-INF/services/java.nio.file.spi.FileSystemProvider");
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   118
        if (Files.exists(source)) {
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   119
            Path target = Paths.get(source.getFileName().toString());
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   120
            Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   121
            try {
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   122
                long s1 = Files.readAttributes(source, BasicFileAttributes.class).size();
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   123
                long s2 = Files.readAttributes(target, BasicFileAttributes.class).size();
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   124
                if (s2 != s1)
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   125
                    throw new RuntimeException("target size != source size");
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   126
            } finally {
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   127
                Files.delete(target);
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   128
            }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   129
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   130
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   131
        // Test: FileStore
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   132
        FileStore store = Files.getFileStore(fs.getPath("/"));
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   133
        if (!store.supportsFileAttributeView("basic"))
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   134
            throw new RuntimeException("BasicFileAttributeView should be supported");
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   135
38568
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   136
        // Test: watch register should throw PME
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   137
        try {
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   138
            fs.getPath("/")
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   139
              .register(FileSystems.getDefault().newWatchService(), ENTRY_CREATE);
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   140
            throw new RuntimeException("watch service is not supported");
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   141
        } catch (ProviderMismatchException x) { }
f992c34c85b3 8147539: (zipfs) ZipPath should throw ProviderMismatchException when invoking register()
sherman
parents: 37803
diff changeset
   142
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   143
        // Test: ClosedFileSystemException
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   144
        fs.close();
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   145
        if (fs.isOpen())
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   146
            throw new RuntimeException("FileSystem should be closed");
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   147
        try {
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   148
            fs.provider().checkAccess(fs.getPath("/missing"), AccessMode.READ);
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   149
        } catch (ClosedFileSystemException x) { }
52008
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   150
6f04692c7d51 8211385: (zipfs) ZipDirectoryStream yields a stream of absolute paths when directory is relative
sherman
parents: 48768
diff changeset
   151
        Files.deleteIfExists(jarFile);
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   152
    }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   153
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   154
    // FileVisitor that pretty prints a file tree
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   155
    static class FileTreePrinter extends SimpleFileVisitor<Path> {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   156
        private int indent = 0;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   157
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   158
        private void indent() {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   159
            StringBuilder sb = new StringBuilder(indent);
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   160
            for (int i=0; i<indent; i++) sb.append(" ");
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   161
            System.out.print(sb);
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   162
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   163
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   164
        @Override
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   165
        public FileVisitResult preVisitDirectory(Path dir,
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   166
                                                 BasicFileAttributes attrs)
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   167
        {
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   168
            if (dir.getFileName() != null) {
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   169
                indent();
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   170
                System.out.println(dir.getFileName() + "/");
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   171
                indent++;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   172
            }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   173
            return FileVisitResult.CONTINUE;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   174
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   175
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   176
        @Override
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   177
        public FileVisitResult visitFile(Path file,
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   178
                                         BasicFileAttributes attrs)
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   179
        {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   180
            indent();
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   181
            System.out.print(file.getFileName());
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   182
            if (attrs.isRegularFile())
37803
ac955d7f5271 8150496: (zipfs) Fix performance issues in zip-fs
sherman
parents: 27565
diff changeset
   183
                System.out.format("%n%s%n", attrs);
ac955d7f5271 8150496: (zipfs) Fix performance issues in zip-fs
sherman
parents: 27565
diff changeset
   184
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   185
            System.out.println();
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   186
            return FileVisitResult.CONTINUE;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   187
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   188
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   189
        @Override
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   190
        public FileVisitResult postVisitDirectory(Path dir, IOException exc)
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   191
            throws IOException
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   192
        {
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   193
            if (exc != null)
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   194
                super.postVisitDirectory(dir, exc);
8165
b67d8b1f4e46 7015391: (zipfs) Update zip provider for 1/2011 changes
sherman
parents: 7531
diff changeset
   195
            if (dir.getFileName() != null)
6699
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   196
                indent--;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   197
            return FileVisitResult.CONTINUE;
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   198
        }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   199
    }
d8229570529d 6990846: Demo: NIO.2 filesystem provider for zip/jar archives
sherman
parents:
diff changeset
   200
}