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)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!