正如FileSystem提供了对文件系统的统一抽象,Path则提供了对文件路径的统一抽象。我们使用Path类可以不用考虑底层操作系统的差异,构造出正确的文件路径然后获取文件以及进行后续的操作。
获取Path
我们不能直接通过Path类来构造Path实例,可以使用下面两种方式:
使用FileSystem获取Path
上篇文章在介绍FileSystem时,我们看到FileSystem有获取Path的方法:
public abstract Path getPath(String first, String... more);
它的参数表示构成这个路径的组件,也就是路径的每个部分,例如/Users/cuihualong/Desktop/monitro.sql这个路径,就是由四个部分构成的,我们只需要把它们作为参数给到getPath方法即可。
所以我们可以这样来构造一个Path:
public static void main(String[] args) throws FileNotFoundException {
FileSystem fileSystem = FileSystems.getDefault();
Path path = fileSystem.getPath("/Users", "cuihualong", "Desktop", "monitor.sql");
System.out.println(path.toFile().exists());
}
使用Paths来获取Path
JDK还提供了一个Paths类来获取Path:
第一个get方法与上面FileSystem的getPath方法参数一样,实际上它就是通过调用FileSystem来实现的:
public static Path get(String first, String... more) {
return FileSystems.getDefault().getPath(first, more);
}
首先通过FileSystems.getDefault()方法来获取当前的文件系统FileSystem,然后调用它的getPath方法。
File和Path的相互转化
Path作为文件路径的抽象,经常用在对文件的操作中。所以JDK提供了File和Path的相互转换。File转换成Path只需要使用File类的toPath方法即可,而Path转为File只需要使用Path类的toFile方法。
public static void main(String[] args) throws FileNotFoundException {
File file = new File("/Users/cuihualong/Desktop/io.txt");
System.out.println(file.exists());
Path path = file.toPath();
System.out.println(path);
File file1 = path.toFile();
System.out.println(file1.exists());
System.out.println(file1.getAbsolutePath());
}
true
/Users/cuihualong/Desktop/io.txt
true
/Users/cuihualong/Desktop/io.txt