2009-04-22 71 views
14

我有一个.jar文件,我放在一起。我想创建一个非常简单的.properties文件,其中包含可配置的内容,如用户名&其他内容,以便他们可以手动编辑,而不必包含GUI编辑器。在.jar之外访问属性文件?

我想什么做的是能够搜索,按以下顺序:

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

我知道如何访问#1和#3(我认为),但是我怎样才能确定在运行时#2和#4?

回答

6

#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... */ 
} 
6

对于当前的工作目录:

new File("."); 

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

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

工作,但更短的是传递空字符串(新文件(“”)) – StaxMan 2009-04-22 03:22:13

+0

我学到了东西!感谢:) – 2009-04-22 05:20:16

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。

+0

一直在寻找这一个星期,他们说每个地方都使用`Main.class.getProtectionDomain()。getCodeSource()`,这不工作!至少不是从一个.app文件内容的Mac上......但是这终于解决了我的问题......非常感谢你...... – 2012-07-21 07:32:48