访问.jar外的属性文件?

时间:2009-04-22 01:32:21

标签: java properties jar

我有一个.jar文件,我正在整理。我想创建一个非常简单的.properties文件,其中包含可配置的内容,例如用户名和文件。其他的东西,所以他们可以手工编辑,而不是我必须包括一个GUI编辑器。

我想做的是能够按此顺序搜索:

  1. 指定的属性文件(args[0]
  2. 当前目录中的MyApp.properties(调用Java的目录)
  3. 用户目录中的MyApp.properties(user.home系统属性?)
  4. 存储应用程序.jar的目录中的MyApp.properties
  5. 我知道如何访问#1和#3(我认为),但如何在运行时#2和#4确定?

3 个答案:

答案 0 :(得分:10)

对于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);

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

答案 1 :(得分:6)

对于当前工作目录:

new File(".");

对于当前目录中名为MyApp.properties的文件:

new File(new File("."), "MyApp.properties");

答案 2 :(得分:6)

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

无论你怎么接近它,#4都有点像kludge。如果您从JAR加载的类不在系统类路径上,那么这是一种替代技术。

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