美文网首页
java中user.dir到底是啥?

java中user.dir到底是啥?

作者: 程序员吉森 | 来源:发表于2019-12-25 16:00 被阅读0次
    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.version Java版本号 11.0.5
    java.version.date Java版本日期 2019-10-15
    java.vendor Java供应商指定字符串 Oracle Corporation
    java.vendor.url Java供应商URL http://java.oracle.com/
    java.vendor.version Java供应商版本 18.9
    java.home Java安装根目录 /usr/lib/jvm/jdk-11.0.5
    java.class.version Java 类文件版本号 55.0
    java.class.path Java 类路径 太长,这里省略
    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确保一些指定的属性值存在,我们可以放心调用。

    相关文章

      网友评论

          本文标题:java中user.dir到底是啥?

          本文链接:https://www.haomeiwen.com/subject/ptucoctx.html