diff -r 115e09b7a004 -r 3acf8e5e2ca0 jdk/src/share/classes/java/nio/file/Paths.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/nio/file/Paths.java Sun Feb 15 12:25:54 2009 +0000 @@ -0,0 +1,123 @@ +/* + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package java.nio.file; + +import java.nio.file.spi.FileSystemProvider; +import java.net.URI; + +/** + * This class consists exclusively of static methods that return a {@link Path} + * by converting a path string or {@link URI}. + * + * @since 1.7 + */ + +public class Paths { + private Paths() { } + + /** + * Constructs a {@code Path} by converting the given path string. + * + *

The {@code Path} is obtained by invoking the {@link FileSystem#getPath + * getPath} method of the {@link FileSystems#getDefault default} {@link + * FileSystem}. + * + * @param path + * The path string to convert + * + * @return The resulting {@code Path} + * + * @throws InvalidPathException + * If the path string cannot be converted to a {@code Path} + * + * @see FileSystem#getPath + */ + public static Path get(String path) { + return FileSystems.getDefault().getPath(path); + } + + /** + * Converts the given URI to a {@link Path} object. + * + *

This method iterates over the {@link FileSystemProvider#installedProviders() + * installed} providers to locate the provider that is identified by the + * URI {@link URI#getScheme scheme} of the given URI. URI schemes are + * compared without regard to case. If the provider is found then its {@link + * FileSystemProvider#getPath getPath} method is invoked to convert the + * URI. + * + *

In the case of the default provider, identified by the URI scheme + * "file", the given URI has a non-empty path component, and undefined query + * and fragment components. Whether the authority component may be present + * is platform specific. The returned {@code Path} is associated with the + * {@link FileSystems#getDefault default} file system. + * + *

The default provider provides a similar round-trip guarantee + * to the {@link java.io.File} class. For a given {@code Path} p it + * is guaranteed that + *

+ * Paths.get(p.{@link Path#toUri() toUri}()).equals( + * p.{@link Path#toAbsolutePath() toAbsolutePath}()) + *
+ * so long as the original {@code Path}, the {@code URI}, and the new {@code + * Path} are all created in (possibly different invocations of) the same + * Java virtual machine. Whether other providers make any guarantees is + * provider specific and therefore unspecified. + * + * @param uri + * The URI to convert + * + * @return The resulting {@code Path} + * + * @throws IllegalArgumentException + * If preconditions on the {@code uri} parameter do not hold. The + * format of the URI is provider specific. + * @throws FileSystemNotFoundException + * If the file system identified by the URI does not exist or the + * provider identified by the URI's scheme component is not installed + * @throws SecurityException + * If a security manager is installed and it denies an unspecified + * permission to access the file system + */ + public static Path get(URI uri) { + String scheme = uri.getScheme(); + if (scheme == null) + throw new IllegalArgumentException("Missing scheme"); + + // check for default provider to avoid loading of installed providers + if (scheme.equalsIgnoreCase("file")) + return FileSystems.getDefault().provider().getPath(uri); + + // try to find provider + for (FileSystemProvider provider: FileSystemProvider.installedProviders()) { + if (provider.getScheme().equalsIgnoreCase(scheme)) { + return provider.getPath(uri); + } + } + + throw new FileSystemNotFoundException("Provider \"" + scheme + "\" not installed"); + } +}