< prev index next >

src/java.base/share/classes/java/nio/file/Paths.java

Print this page
rev 51675 : 8207690: Parsing API for classpath and similar path strings

*** 23,39 **** * 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}. * * @apiNote * It is recommended to obtain a {@code Path} via the {@code Path.of} methods * instead of via the {@code get} methods defined in this class as this class * may be deprecated in a future release. * --- 23,48 ---- * questions. */ package java.nio.file; ! import jdk.internal.util.PathParser; ! ! import java.io.File; import java.net.URI; + import java.util.Arrays; + import java.util.List; + import java.util.Objects; + import java.util.stream.Collectors; /** * This class consists exclusively of static methods that return a {@link Path} * by converting a path string or {@link URI}. * + * <p>Unless otherwise noted, passing a {@code null} argument to a method + * in this class will cause a {@link NullPointerException} to be thrown. + * * @apiNote * It is recommended to obtain a {@code Path} via the {@code Path.of} methods * instead of via the {@code get} methods defined in this class as this class * may be deprecated in a future release. *
*** 94,99 **** --- 103,159 ---- * @see Path#of(URI) */ public static Path get(URI uri) { return Path.of(uri); } + + /** + * Returns a list of path strings parsed from a string with empty paths removed. + * The {@link File#pathSeparator} is used to split the string and + * empty strings are removed. A list is created of the remaining strings. + * <p> + * The {@code pathSeparator} character can be included in a path + * on operating systems that support quoting segments of the string. + * + * @implNote On Windows, quoting of path segments is supported. + * Each {@link File#pathSeparator} between pairs of quotation marks (@code 'U+0022') + * is considered an ordinary character and the quotes are omitted from the path. + * An unmatched double-quote is matched by the end of the string. + * + * @param path a {@code non-null} string containing paths separated by + * {@link File#pathSeparator}. + * @return a {@code non-null} immutable list of strings for each non-empty path + */ + public static List<String> pathToStrings(String path) { + Objects.requireNonNull(path, "path"); + return List.of(PathParser.parsePath(path, null)); + } + + /** + * Returns a list of Paths parsed from a string with empty paths removed. + * The {@link File#pathSeparator} is used to split the string and + * empty strings are removed. A list is created of the remaining strings after + * mapping each string using {@link Path#of Path.of} using the + * {@link FileSystems#getDefault default} {@link FileSystem}. + * <p> + * The {@code pathSeparator} character can be included in a path + * on operating systems that support quoting segments of the string. + * + * @implNote On Windows, quoting of path segments is supported. + * Each {@link File#pathSeparator} between pairs of quotation marks (@code 'U+0022') + * is considered an ordinary character and the quotes are omitted from the path. + * An unmatched double-quote is matched by the end of the string. + * + * @param path a {@code non-null} string containing paths separated by + * {@link File#pathSeparator}. + * @return a {@code non-null} immutable list of Paths for each non-empty path + * + * @throws InvalidPathException + * if each path string cannot be converted to a {@code Path} + */ + public static List<Path> pathToPaths(String path) { + Objects.requireNonNull(path, "path"); + return Arrays.stream(PathParser.parsePath(path, null)) + .map(s -> Path.of(s)) + .collect(Collectors.toList()); + } }
< prev index next >