360. Java IO API - 访问文件系统

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 提供的工具保持跨平台兼容性。
相关推荐
excel1 小时前
IndexNow:让搜索引擎更快发现网站更新的主动通知协议
前端·后端·架构
Json____1 小时前
用 FastAPI + Vue3 打造一套完整的在线考试系统:从组卷到阅卷的业务闭环实践
后端·node.js·fastapi·it学习·wwwoop.com
子兮曰1 小时前
CSS 复现 23 种设计风格:从拟物到液态玻璃的成本阶梯与兜底写法【实战】
前端·css·视觉设计
虚无境2 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
小灰灰搞电子2 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
柳杉2 小时前
从数字化到数智化:3D 可视化大屏的下一个五年
前端·ai编程·数据可视化
专业程序开发源3 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
卷无止境3 小时前
面向arm64桌面客户端开发全景:语言、框架与生态
后端·python
风骏时光牛马3 小时前
从零到实战:AI全栈学习进阶路线
前端
FRing033 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数