Java中user.dir到底是什么?System.getProperty方法获取属性

用户目录user.dir是Java程序中的一个系统属性,表示用户当前工作目录。在JVM启动时自动初始化,通常在IDE中运行项目时,该目录为项目根目录。通过System.getProperty方法可以安全获取这些属性,但修改系统属性可能产生不可预料的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String workDirectory = System.getProperty("user.dir");

很多同学一定写过或者见过上面的代码。那么大家有没有思考过,"user.dir"到底是什么意思?是系统环境变量?还是用户文件夹?

正所谓“万事不决问源码”,让我们一起到源代码里一探究竟:

 public static String getProperty(String key) {
        checkKey(key);
        SecurityManager sm = getSecurityManager();
        if (sm != null) {
            sm.checkPropertyAccess(key);
        }

        return props.getProperty(key);
    }

// 本地方法,用于初始化props属性
  private static native Properties initProperties(Properties props);  

从上面源码中我们可以看出,getProperty方法是从System类的一个静态属性props里面获取相应的值,而props属性是通过本地方法initProperties来赋予初值的。也就是说,在JVM启动时通过执行本地方法自动初始化了这个系统属性。好在jdk的文档注释上向我们说明了JVM确保有哪些属性,我们通过下表列出:

属性名说明示例值
java.versionJava版本号11.0.5
java.version.dateJava版本日期2019-10-15
java.vendorJava供应商指定字符串Oracle Corporation
java.vendor.urlJava供应商URLhttp://java.oracle.com/
java.vendor.versionJava供应商版本18.9
java.homeJava安装根目录/usr/lib/jvm/jdk-11.0.5
java.class.versionJava 类文件版本号55.0
java.class.pathJava 类路径太长,这里省略
os.name操作系统名Linux
os.arch操作系统架构amd64
os.version操作系统版本5.0.0-37-generic
file.separator文件分隔符/
path.separator路径分隔符:
line.separator换行符\n
user.name用户账号lhing17
user.home用户根目录/home/lhing17
user.dir用户当前工作目录/home/lhing17/IdeaProjects/rocketDownloader

上表中的示例值是在我个人电脑上通过测试类输出的结果。我们可以清楚地看到,“user.dir"是指用户当前工作目录。如果你是在IDE中运行项目,这个目录就是你当前项目所在的根目录。除了"user.dir"外,这里还提供了其他一些有用的属性,比如"java.home”、"user.home"等。JVM(指java虚拟机)保证上表中的属性是有值的,在项目中我们可以放心通过System.getProperty(propertyName)的方式去获取,不必担心发生空指针异常。

我们还可以通过System.setProperty(propertyName, propertyValue)的方式去修改这些属性,或者自定义一些新的属性。但是,java官方文档中明确提醒我们,修改这些系统属性可能造成不可预料的副作用,通常情况下我们不应该去修改这些属性。

总结

System.getProperty方法获取的属性是由JVM加载时初始化的属性,如"user.dir"代表用户当前的工作目录。JVM确保一些指定的属性值存在,我们可以放心调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Archie_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值