System.getProperty("user.dir") 返回 JVM 启动时的当前工作目录,由启动位置决定,运行时不可修改;它不是项目根目录、classpath 或代码位置,也不同于 user.home。

直接调用 System.getProperty("user.dir") 就能获取当前工作目录(即 JVM 启动时所在的目录),它返回的是一个字符串,表示用户当前的工作路径。
user.dir 的含义和特点
user.dir 是 Java 系统属性之一,由 JVM 在启动时自动初始化,代表进程的“当前工作目录”(Current Working Directory),不是项目根目录,也不是 classpath 路径,更不是代码所在位置。它取决于你从哪个目录执行 java 命令。
- 在 IDE 中运行时,通常默认为项目根目录(但可配置)
- 在终端中运行时,就是你执行
java -jar xxx.jar所在的目录 - 该值运行时不可修改(
System.setProperty对它无效)
基本用法示例
只需一行代码:
String currentDir = System.getProperty("user.dir");System.out.println(currentDir); // 例如:/Users/name/project
常见误区与注意事项
容易混淆的几个点:
立即学习“Java免费学习笔记(深入)”;
-
user.dir≠user.home(后者是用户主目录,如/home/xxx) -
user.dir≠ 类路径(ClassLoader.getSystemResource("")返回的是 classpath 起始位置) - 相对路径文件操作(如
new File("data.txt"))默认基于user.dir解析 - 如果需要稳定路径,建议配合
Paths.get("").toAbsolutePath().toString()使用(效果相同,但语义更明确)
验证当前值的小技巧
写个临时测试方法,打印出来最直观:
public static void main(String[] args) { System.out.println("user.dir = " + System.getProperty("user.dir")); System.out.println("user.home = " + System.getProperty("user.home"));}
运行前后切换终端目录再对比输出,就能清楚看到变化。


















