2009-04-22 67 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