访问.jar外部的属性文件?

2022-09-04 01:40:20

我有一个.jar文件放在一起。我想创建一个非常非常简单的.properties文件,其中包含可配置的东西,如用户名和其他东西,这样他们就可以手动编辑,而不必包含GUI编辑器。

我想做的是能够按以下顺序进行搜索:

  1. 指定的属性文件 (args[0])
  2. 当前目录(从中调用 Java 的目录)中的 MyApp.properties
  3. 用户目录中的 MyApp.properties(user.home 系统属性?
  4. 存储应用程序.jar的目录中的 MyApp.properties

我知道如何访问#1和#3(我想),但是如何在运行时确定#2和#4?


答案 1

对于4,你可以试试这个。获取类路径:

String classpath = System.getProperty("java.class.path");

然后搜索应用程序 jar 的名称:

int jarPos = classpath.indexOf("application.jar");

解析出通向它的路径:

int jarPathPos = classpath.lastIndexOf(File.pathSeparatorChar, jarPos) + 1;
String path = classpath.substring(jarPathPos, jarPos);

然后追加 。确保检查 ,这意味着如果类路径(可能在开发环境中运行时)找不到 jar。MyApp.propertiesjarPos == -1


答案 2

#2 是“user.dir”系统属性。#3 是“user.home”属性。

#4有点笨拙,无论你如何接近它。下面是一种替代技术,如果从 JAR 加载的类不在系统类路径上,则此方法有效。

CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();
if (src != null) {
  URL url = new URL(src.getLocation(), "MyApp.properties");
  ...
} 
else {
  /* Fail... */
}