353. Java IO API - Path操作

5 阅读2分钟

353. Java IO API - Path操作

创建Path

使用 Paths 工厂类

Path 实例包含了指定文件或目录位置的信息。在定义时,Path 会被提供一系列的名称元素。可以包含根元素或文件名,但并不强制要求。一个 Path 可能只包含单一的目录名或文件名。

可以通过以下方式轻松地创建 Path 对象,使用 Paths(注意是复数)助手类中的 get 方法:

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathExample {
    public static void main(String[] args) {
        // 使用绝对路径创建 Path 实例
        Path p1 = Paths.get("/tmp/foo");
        
        // 使用命令行参数创建 Path 实例
        Path p2 = Paths.get(args[0]);
        
        // 使用 URI 创建 Path 实例
        Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));
    }
}
  • Paths.get(String) 方法是以下代码的简写形式:
Path p4 = FileSystems.getDefault().getPath("/users/sally");
通过拼接路径创建 Path

可以通过组合系统属性与路径字符串来创建路径。例如,假设主目录是 /u/joe(类 Unix 系统)或 C:\joe(Windows 系统),可以创建类似下面的路径:

import java.nio.file.Path;
import java.nio.file.Paths;

public class PathExample {
    public static void main(String[] args) {
        // 创建路径 /u/joe/logs/foo.log 或 C:\joe\logs\foo.log
        Path p5 = Paths.get(System.getProperty("user.home"), "logs", "foo.log");
        System.out.println(p5);  // 输出完整路径
    }
}

在这个示例中,System.getProperty("user.home") 会返回当前用户的主目录,根据操作系统的不同返回 /u/joeC:\joe,接着拼接上 "logs""foo.log"

使用 Path.of() 工厂方法(Java 9 引入)

Java 9 引入了 Path 接口的两个工厂方法,使得创建路径更为简便和灵活:

  1. 第一个工厂方法:接受一个字符串表示路径的起始部分,可以通过 varargs 参数拼接多个路径元素,形成完整路径。
  2. 第二个工厂方法:接受一个 URI 对象,将其转换为 Path
示例 1:使用字符串创建路径
import java.nio.file.Path;

public class PathExample {
    public static void main(String[] args) {
        // 使用 Path.of() 方法创建路径
        Path debugFile = Path.of("/tmp/debug.log");
        System.out.println(debugFile);  // 输出:/tmp/debug.log
    }
}

Path.of() 方法的好处是它比 Paths.get() 更加简洁,同时它能够处理更多的路径拼接场景。

示例 2:使用 URI 创建路径
import java.nio.file.Path;
import java.net.URI;

public class PathExample {
    public static void main(String[] args) {
        // 使用 URI 创建 Path 实例
        URI uri = URI.create("file:///Users/joe/FileTest.java");
        Path pathFromUri = Path.of(uri);
        System.out.println(pathFromUri);  // 输出:/Users/joe/FileTest.java
    }
}

这里,Path.of() 方法通过接收 URI 并自动转换为文件路径,简化了路径创建的过程。


总结

通过 PathsPath.of() 工厂方法,可以轻松创建 Path 对象,从而指定文件或目录的位置。Paths.get() 是早期 Java 版本的方式,而 Path.of() 则为 Java 9 及以后的版本提供了更加简洁和现代的 API。无论是通过字符串还是 URI,都可以方便地创建符合操作系统和需求的路径。