正如FileSystem提供了对文件系统的统一抽象,Path则提供了对文件路径的统一抽象。我们使用Path类可以不用考虑底层操作系统的差异,构造出正确的文件路径然后获取文件以及进行后续的操作。

获取Path

我们不能直接通过Path类来构造Path实例,可以使用下面两种方式:

使用FileSystem获取Path

上篇文章在介绍FileSystem时,我们看到FileSystem有获取Path的方法:

  1. public abstract Path getPath(String first, String... more);

它的参数表示构成这个路径的组件,也就是路径的每个部分,例如/Users/cuihualong/Desktop/monitro.sql这个路径,就是由四个部分构成的,我们只需要把它们作为参数给到getPath方法即可。
所以我们可以这样来构造一个Path:

  1. public static void main(String[] args) throws FileNotFoundException {
  2. FileSystem fileSystem = FileSystems.getDefault();
  3. Path path = fileSystem.getPath("/Users", "cuihualong", "Desktop", "monitor.sql");
  4. System.out.println(path.toFile().exists());
  5. }

使用Paths来获取Path

JDK还提供了一个Paths类来获取Path:
image.png
第一个get方法与上面FileSystem的getPath方法参数一样,实际上它就是通过调用FileSystem来实现的:

  1. public static Path get(String first, String... more) {
  2. return FileSystems.getDefault().getPath(first, more);
  3. }

首先通过FileSystems.getDefault()方法来获取当前的文件系统FileSystem,然后调用它的getPath方法。

File和Path的相互转化

Path作为文件路径的抽象,经常用在对文件的操作中。所以JDK提供了File和Path的相互转换。File转换成Path只需要使用File类的toPath方法即可,而Path转为File只需要使用Path类的toFile方法。

  1. public static void main(String[] args) throws FileNotFoundException {
  2. File file = new File("/Users/cuihualong/Desktop/io.txt");
  3. System.out.println(file.exists());
  4. Path path = file.toPath();
  5. System.out.println(path);
  6. File file1 = path.toFile();
  7. System.out.println(file1.exists());
  8. System.out.println(file1.getAbsolutePath());
  9. }
  1. true
  2. /Users/cuihualong/Desktop/io.txt
  3. true
  4. /Users/cuihualong/Desktop/io.txt