应使用 File.separator 或 System.getProperty("file.separator") 获取系统路径分隔符;Paths.get() 专用于构建 Path 对象,不提供获取分隔符的功能,且其返回的字符串形式不稳定,不可依赖。

Java NIO 本身不提供直接通过 Paths.get() 获取系统路径分隔符的功能,因为 Paths.get() 是用于构建 Path 对象的工厂方法,不是用来查询系统属性的。路径分隔符(如 / 在 Unix/Linux/macOS, 在 Windows)属于操作系统层面的信息,应通过标准 Java 系统属性或 File 工具类获取。
用 File.separator 获取系统路径分隔符
这是最常用、最可靠的方式,与 NIO 无关但完全兼容:
-
File.separator是一个字符串常量,值为当前系统的默认路径分隔符(/或) - 它在 JVM 启动时根据操作系统自动初始化,无需额外判断
- 示例:String sep = File.separator; → Windows 上得到
"\",Linux 上得到"/"
用 System.getProperty("file.separator")
等价于 File.separator,本质是读取同一系统属性:
- String sep = System.getProperty("file.separator");
- 语义更明确,适合需要强调“来自系统属性”的场景
- 注意:该属性不可为 null,JVM 保证其存在
为什么 Paths.get() 不适合获取分隔符?
Paths.get() 的设计目标是解析路径字符串并返回平台感知的 Path 实例,它会自动处理不同风格的分隔符(例如在 Windows 上接受 / 或 ),但不会暴露底层分隔符规则:
立即学习“Java免费学习笔记(深入)”;
-
Paths.get("a/b/c")和Paths.get("a\b\c")在 Windows 上都生成合法Path - 调用
path.toString()返回的是内部规范化形式(如 Windows 上可能显示为ac),但这不是稳定 API 行为,不应依赖 - 没有
path.getSeparator()这样的方法
如果必须结合 Paths 使用分隔符
比如拼接路径字符串再传给 Paths.get(),推荐做法是:
- 优先使用
Paths.get(parent).resolve(child),让 NIO 自动处理分隔逻辑 - 若需字符串拼接(如日志打印、配置生成),才用
File.separator构建,再传入Paths.get() - 示例:String pathStr = "config" + File.separator + "app.properties";
Path p = Paths.get(pathStr);


















