System.getProperty(user.dir)定位问题解析

 更新时间:2023年05月26日 10:11:25   作者:小风呀  
System.getProperty(user.dir) 获取的是启动项目的容器位置,用IDEA是项目的根目录,部署在tomcat上是tomcat的启动路径,即tomcat/bin的位置,这篇文章主要介绍了System.getProperty(user.dir)定位问题,需要的朋友可以参考下

System.getProperty(user.dir)定位问题

前言

随着学习java web 的深入学习,为了巩固自己的学习成果,练习了一个springboot项目,但在部署的时候发现了一个问题,即:
System.getProperty(user.dir)定位问题

一、System.getProperty方法

getProperty()这个方法是获取指定键指示的系统属性的

@Test
    public void test(){
        //获取所有的属性
        Properties properties = System.getProperties();
        //遍历所有的属性
        for (String key : properties.stringPropertyNames()) {
            //输出对应的键和值
            System.out.println(key + "=" + properties.getProperty(key));
        }
    }

结果如下,具有很多可以读取的内容

java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C:\javaweb\jdk1.8.0_101_64\jre\bin
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io user.script= user.country=CN
sun.java.launcher=SUN_STANDARD sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=E:\7.ProjectCodeSource\jdbc
java.runtime.version=1.8.0_101-b13
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C:\javaweb\jdk1.8.0_101_64\jre\lib\endorsed
os.arch=amd64 java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\
line.separator=
java.vm.specification.vendor=Oracle Corporation user.variant=
os.name=Windows 10 sun.jnu.encoding=GBK
java.library.path=C:\javaweb\jdk1.8.0_101_64\bin;
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered
Compilers os.version=10.0
user.home=C:\Users\Administrator
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
user.name=Administrator
java.class.path=E:\7.ProjectCodeSource\jdbc\target\test-classes;
java.vm.specification.version=1.8 sun.arch.data.model=64
java.home=C:\javaweb\jdk1.8.0_101_64\jre
sun.java.command=org.eclipse.jdt.internal.junit.runner.RemoteTestRunner
-version 3 -port 57975 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader
-loaderpluginname org.eclipse.jdt.junit4.runtime -test com.jim.jdbc.JDBCTest:test java.specification.vendor=Oracle
Corporation user.language=zh awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_101
java.ext.dirs=C:\javaweb\jdk1.8.0_101_64\jre\lib\ext;C:\Windows\Sun\Java\lib\ext
sun.boot.class.path=C:\javaweb\jdk1.8.0_101_64\jre\lib\resources.jar;C:\javaweb\jdk1.8.0_101_64\jre\lib\rt.jar;C:\javaweb\jdk1.8.0_101_64\jre\lib\sunrsasign.jar;
java.vendor=Oracle Corporation
file.separator=\
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.cpu.endian=little
sun.io.unicode.encoding=UnicodeLittle
sun.desktop=windows
sun.cpu.isalist=amd64

二、踩坑的属性user.dir

1.在IDEA中System.getProperty(user.dir)的值

public static void main(String[] args) {
        System.out.println(System.getProperty("user.dir"));
    }

结果为:D:\IDEA\workplace\music

2.部署到tomcat中的System.getProperty(user.dir)

结果为:/opt/apache-tomcat-9.0.0.M26/bin/

总结

System.getProperty(user.dir) 获取的是启动项目的容器位置,用IDEA是项目的根目录,部署在tomcat上是tomcat的启动路径,即tomcat/bin的位置

System.getProperty("user.dir")的理解

System.getProperty("user.dir"),都说获得的是“工作目录”,有老铁们在意这个,工作目录怎么理解吗?我这做了个简单的测试。

但是,你把这个配置文件放在项目的根目录下面,也就是 说你的项目文件夹下面直接放一个配置文件,这个时候,就可以,啥前缀不加的,就可以读取到,这个配置文件啦。

但是,这么放置配置文件,好像有点不合适。

那么,这个路径究竟该如何写,才不会报错呢?

1,在 java project 中的配置文件读取,项目打包是jar类型的。

System.getProperty("user.dir");
解释:
默认定位到的当前用户目录("user.dir")(即工程根目录)
JVM就可以据"user.dir" + "你自己设置的目录" 得到完整的路径(即绝对路径)
这有个前提,你的工程不是web项目,不然,这个返回值就不是项目的根目录啦,是tomcat的bin目录。

到此这篇关于System.getProperty(user.dir)定位问题的文章就介绍到这了,更多相关System.getProperty(user.dir)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java构建工具Gradle的安装和使用图文教程

    Java构建工具Gradle的安装和使用图文教程

    Gradle 是一个功能强大的构建工具,支持自动化和定制化的构建过程,下面这篇文章主要介绍了Java构建工具Gradle的安装和使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Spring Boot与Redis的缓存一致性问题解决

    Spring Boot与Redis的缓存一致性问题解决

    在使用缓存时,缓存一致性问题是一个常见的挑战,本文主要介绍了Spring Boot与Redis的缓存一致性问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

    Spring Boot spring-boot-maven-plugin 参数配置详解(最

    文章介绍了Spring Boot Maven插件的5个核心目标(repackage、run、start、stop、build-info)及其应用场景,涵盖应用打包、运行、集成测试、构建信息生成、依赖管理等,同时说明了如何配置pom.xml、调试参数及随机端口设置,感兴趣的朋友一起看看吧
    2025-07-07
  • javaWeb传收参数方式总结示例分析

    javaWeb传收参数方式总结示例分析

    这篇文章主要为大家介绍了javaWeb传收参数方式总结示例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Spring 注入集合实现过程示例详解

    Spring 注入集合实现过程示例详解

    这篇文章主要为大家介绍了Spring 注入集合实现过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Spring RestTemplate使用方法示例总结

    Spring RestTemplate使用方法示例总结

    这篇文章主要介绍了Spring RestTemplate使用方法示例总结,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • Java 继承和多态的作用及好处

    Java 继承和多态的作用及好处

    文章讲解Java继承与多态的概念、语法及应用,继承通过extends复用父类成员,减少冗余;多态实现方法重写与向上转型,提升灵活性与代码复用性,动态绑定降低圈复杂度,感兴趣的朋友一起看看吧
    2025-06-06
  • Java实现文件压缩为zip和解压zip压缩包

    Java实现文件压缩为zip和解压zip压缩包

    这篇文章主要为大家介绍了Java如何实现将文件压缩为zip以及解压zip压缩包,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-06-06
  • spring实现bean对象创建代码详解

    spring实现bean对象创建代码详解

    这篇文章主要介绍了spring实现bean对象创建代码详解,具有一定借鉴价值,需要的朋友可以参考下
    2017-12-12
  • idea移除子模块实现Moudle后重新导入

    idea移除子模块实现Moudle后重新导入

    文章介绍了如何在项目中重新添加一个移除的模块,提供了两种方法:通过Project Structure导入模块或手动创建package并进行修改
    2026-02-02

最新评论