360. Java IO API - 访问文件系统
在 Java NIO 中,路径(Path)和文件系统(FileSystem)密切相关。你可以通过 FileSystems 类访问默认文件系统、获取路径分隔符,并进行模式匹配操作。以下是几个关键点:
🏠 默认文件系统:FileSystems.getDefault()
要获取 Java 当前运行环境下的默认文件系统,可以使用以下方式:
java
FileSystem fs = FileSystems.getDefault();
大多数情况下,Path 实例都是自动绑定到默认文件系统上。除非你显式从其他 FileSystem 创建 Path,否则它始终使用默认系统。
🧵 使用 getPathMatcher() 进行路径匹配
你可以使用 FileSystem.getPathMatcher() 方法来创建一个路径匹配器,比如匹配所有扩展名的文件:
java
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:*.*");
Path path1 = Paths.get("file.txt");
Path path2 = Paths.get("file");
System.out.println(matcher.matches(path1)); // true
System.out.println(matcher.matches(path2)); // false
📌 glob:\*.\* 表示匹配任何文件名中带有一个点号(.)的文件。
🔗 Path 与 FileSystem 的关系
每一个 Path 对象都绑定到一个 FileSystem 上:
- 当使用
Paths.get(...)创建Path时,默认使用的是当前平台的默认文件系统。 - 如果你使用的是 ZIP 文件系统或其他虚拟文件系统,则路径会绑定到该文件系统中。
🔣 路径分隔符:POSIX vs Windows
不同操作系统使用不同的路径分隔符:
| 平台 | 分隔符 |
|---|---|
| POSIX/Linux/macOS | / |
| Windows | \ |
Java 中如何获取当前平台的分隔符?
java
// 方法一:跨平台通用
String separator = File.separator;
// 方法二:使用默认文件系统
String fsSeparator = FileSystems.getDefault().getSeparator();
System.out.println("Path separator: " + separator);
📝 示例输出(Linux):
java
Path separator: /
📝 示例输出(Windows):
java
Path separator: \
💡 建议在处理跨平台路径拼接时,避免手动拼接字符串,推荐使用
Paths.get(...)或Path.resolve(...)。
💡 小贴士
| 操作 | 建议方式 |
|---|---|
| 获取默认文件系统 | FileSystems.getDefault() |
| 匹配路径模式(如 *.txt) | getPathMatcher("glob:*.txt") |
| 获取平台路径分隔符 | File.separator 或 getDefault().getSeparator() |
| 避免路径拼接错误 | 使用 Path.resolve(...) |
🔚 总结
- Java NIO 的
Path与FileSystem紧密关联。 - 使用
FileSystems.getDefault()可安全访问当前系统。 - 区分
glob模式和regex模式,避免路径匹配错误。 - 避免硬编码路径分隔符,使用 Java 提供的工具保持跨平台兼容性。