Path是jdk7的新特性,目前来看有取代File的趋势。
相关的内容包括Path接口,Paths工具类,Files工具类。
一、构造Path对象
由于Path本身是一个接口,不能直接实例化,只能通过Paths工具类或FileSystems类构造。
1、通过FileSystem构造Path。
Path path = FileSystems.getDefault().getPath("C:/", "access.log");
2、通过Paths工具类构造Path。
查阅JDK文档发现,Paths工具类只包含两个静态方法,这两个方法全部是用于构造Path对象,分别为:
//Converts a path string, or a sequence of strings that when joined form a path string, to a Path.
static Path get(String first, String... more)
//Converts the given URI to a Path object.
static Path get(URI uri)
采用这两个方法构造Path的示例如下:
Path pathFromStr = Paths.get("C:/", "access.log");
URI uri = URI.create("file:///C:/access.log");
Path pathFromUri = Paths.get(u);
查阅Paths工具类源代码,发现其get函数内部还是使用了FileSystem来构造Path。
二、Path方法介绍
1、compareTo方法
int compareTo(Path other)
//Compares two abstract paths lexicographically.按照字典序比较两个Path,例如:
Path path1= Paths.get("/a/b/c/d");
Path path2= Paths.get("/a/b/f");
System.out.println(path1.compareTo(path2));
//输出为-3。
2、startWith、endWith方法。判断一个Path是不是另一个Path的前缀、后缀。
3、getFileName方法,返回当前路径中,包含的文件名,通俗理解就是最后一层目录的名称,例如:
Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.getFileName());
//输出为d
4、getFileSystem方法,返回当前系统所使用的文件系统,返回类型为FileSystem实例,例如:
Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.getFileSystem());
//输出为sun.nio.fs.MacOSXFileSystem@2f0e140b
5、getNameCount方法和getName方法。getNameCount方法返回当前Path中包含的目录层数,getName方法返回第index层目录的Path对象。
6、getParent方法和getRoot方法,这两个方法一看名字就明白。
7、resolve方法和resolveSibling方法。resolve方法的作用相当于把当前路径当成父目录,而把参数中的路径当成子目录或是其中的文件,进行解析之后得到一个新路径,resolveSibling方法的作用与resolve方法类似,只不过把当前路径的父目录当成解析时的父目录。
Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.resolve(Paths.get("e")));
//输出为/a/b/c/d/e
System.out.println(path1.resolveSibling(Paths.get("e")));
//输出为/a/b/c/e
8、relativize方法计算当前Path变换到参数给定的Path的相对路径,例如
Path path1= Paths.get("/a/b/c/d/");
System.out.println(path1.relativize(Paths.get("/a/b/")));
//输出为../..
9、toAbsolutePath方法,将当前路径转换为绝对路径。
Path path1= Paths.get("/a/b/c/d/a");
System.out.println(path1.toAbsolutePath());
//输出为/a/b/c/d/a
Path path2= Paths.get("a/b/c/d/a");
System.out.println(path2.toAbsolutePath());
//输出为/Users/suneony/IdeaProjects/FillRobot/a/b/c/d/a
10、normalize方法,将当前路径规范化
public final class Foo
{
private static final List<String> INPUTS = Arrays.asList(
"/foo", "//foo", "foo/", "foo/bar", "foo/bar/../baz", "foo//bar"
);
public static void main(final String... args)
{
Path path;
for (final String input: INPUTS) {
path = Paths.get("/", input).normalize();
System.out.printf("%s -> %s\n", input, path);
}
}
}
/foo -> /foo
//foo -> /foo
foo/ -> /foo
foo/bar -> /foo/bar
foo/bar/../baz -> /foo/baz
foo//bar -> /foo/bar
后续继续介绍Files工具类与Path的配合使用方法。
欢迎大家访问我的小站http://www.toolset.site