原创

Spring Boot 2实践系列(五十八):获取系统配置,临时目录,jar包所在目录

Java 应用获取系统配置,获取临时目录,获取 Spring Boot Jar 包所在的目录。

java 应用系统配置

可以使用 System.getProperty(String key) 获取系统的配置信息,下面是可以的入参:

java.version Java运行时环境版本
java.vendor Java运行时环境供应商
java.vendor.url Java供应商的 URL
java.home Java安装目录
java.vm.specification.version Java虚拟机规范版本
java.vm.specification.vendor Java虚拟机规范供应商
java.vm.specification.name Java虚拟机规范名称
java.vm.version Java虚拟机实现版本
java.vm.vendor Java虚拟机实现供应商
java.vm.name Java虚拟机实现名称
java.specification.version Java运行时环境规范版本
java.specification.vendor Java运行时环境规范供应商
java.specification.name Java运行时环境规范名称
java.class.version Java类格式版本号
java.class.path Java类路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
java.compiler 要使用的 JIT 编译器的名称
java.ext.dirs 一个或多个扩展目录的路径
os.name 操作系统的名称
os.arch 操作系统的架构
os.version 操作系统的版本
file.separator 文件分隔符(在 UNIX 系统中是“/”)
path.separator 路径分隔符(在 UNIX 系统中是“:”)
line.separator 行分隔符(在 UNIX 系统中是“/n”)
user.name 用户的账户名称
user.home 用户的主目录
user.dir 用户的当前工作目录

jar包所在目录

public ApplicationHome(Class<?> sourceClass) {
    this.source = findSource((sourceClass != null) ? sourceClass : getStartClass());
    this.dir = findHomeDir(this.source);
}
// 传入当前class 对象,取 class 对象的主目录
ApplicationHome home = new ApplicationHome(getClass());

ApplicationHome 提供对应用程序主目录的访问。尝试为 Jar 文件、分解的归档文件和直接运行的应用程序选择一个合理的目录(严谨点应该是文件系统的路径)。

ApplicationHome 提供了两个方法:

  • home.getDir():返回应用主目录,永不为空。

    实际是获取当前 class 文件所在的目录,如果是在 IDEA 运用应用,打印输出的是:...\target\classes;如果是直接运行 Spring Boot Jar 文件,输出的就是 jar 所在的目录。

  • home.getSource():返回用于查找主目录的基础源(构造方法传入的 class 对象),通常是 jar 文件或目录,如果 class 对象不存在,返回 null。

其它方式:

//第一种
File path = new File(ResourceUtils.getURL("classpath:").getPath());
if(!path.exists()) path = new File("");
System.out.println(path.getAbsolutePath());
//第二种
System.out.println(System.getProperty("user.dir"));
//第三种
String path1 = ClassUtils.getDefaultClassLoader().getResource("").getPath();
System.out.println(URLDecoder.decode(path1, "utf-8"));
//第四种
String path2 = ResourceUtils.getURL("classpath:").getPath();
System.out.println(path2);
//第五种
ApplicationHome h = new ApplicationHome(getClass());
File jarF = h.getSource();
System.out.println(jarF.getParentFile().toString());

IDEA 运行输出:

方式一:D:\workspace\demo\manager\manager-provider\target\classes
方式二:D:\workspace\demo
方式三:/D:/workspace/demo/manager/manager-provider/target/classes/
方式四:/D:/workspace/demo/manager/manager-provider/target/classes/
方式五:D:\workspace\demo\manager\manager-provider\target

运行 jar 包的输出:

注意方 式三 和 方式四,这样的路径在操作系统的文件系统中无法识别的,程序处理上就会报异常。

方式一:D:\workspace\demo\manager\manager-provider\target
方式二:D:\workspace\demo\manager\manager-provider\target
方式三:file:/D:/workspace/demo/manager/manager-provider/target/manager-provider.jar!/BOOT-INF/classes!/
方式四:file:/D:/workspace/demo/manager/manager-provider/target/manager-provider.jar!/BOOT-INF/classes!/
方式五:D:\workspace\demo\manager\manager-provider\target

获取临时文件目录

String tempPath = System.getProperty("java.io.tmpdir")
正文到此结束
本文目录