2009-04-09 68 views
0

我知道你可以使用java.util.Properties來讀取Java屬性文件。模擬app.config for Java?

請參見:Java equivalent to app.config?

有沒有把這個文件規範的地方?在.NET中,我們將application.exe.config放在與application.exe相同的目錄中。應用程序默認在此查找它。

Java可以在類路徑中查找屬性文件,但我很努力地理解要使用的文件名/路徑結構以及如何使用標準.properties格式或XML格式文件。

假設我有一個打包在org_example_api.jar(根包是org.example.api)的API。我不想將屬性文件放在jar中,因爲它應該可以由用戶編輯。我希望用戶能夠將相關的.properties或.xml文件中所需的配置屬性放在相對於類路徑的某處,這樣我就可以在不需要了解ir文件系統結構的任何信息的情況下找到它。

將在所有系統中,這個工作:

/classpath/org_example_api.jar 
/classpath/org/example/api/config.properties OR 
/classpath/org/example/api/config.xml 

代碼:

java.util.Properties = ? //NEED SOME HELP HERE 

回答

2

這完全取決於您正在開發的應用程序的類型。

1)如果它是一個Web應用程序,最好的地方是在WEB-INF/classes /文件夾中。

2)如果你正在開發一個獨立的應用程序,有很多方法。從你的例子我認爲下面的結構將起作用。

/<dist>/org_example_api.jar 
/<dist>/config.xml 
/<dist>/run.sh 

在run.sh可以啓動java應用程序還提供了當前目錄中的類路徑。像這樣的東西。

的java -cp:org_example_api.jar ClassToExecute

3)如果它是一個API分佈它是由最終用戶。您可以告訴用戶他們可以在類路徑中提供config.xml,它應該遵循一些預定義的結構。在這種情況下,您可以將Log4J作爲示例。

1

世界是敞開的,以你在這裏。唯一的最佳實踐是什麼工作最適合你:

  1. 任何程序用戶運行的是可以要求路徑屬性文件作爲參數
  2. 應用程序可以被配置爲在當前目錄下尋找config.properties
  3. 如果找不到文件,您可能會回到user.home目錄,或者回退到您的應用程序安裝位置。

就我個人而言,我通常會讓我的應用程序嘗試從類路徑讀取屬性文件 - 但我不是處於最終用戶更新/更改文件的世界。

無論您選擇什麼選項,只要確保您清楚地爲您的用戶記錄它,以便他們知道要編輯哪個文件以及它需要的位置!

1

你可以把屬性在你的CLASSPATH的目錄或JAR文件,然後使用

InputStream is = getClass().getResourceAsStream("/path/goes/here"); 
Properties props = new Properties(); 
props.load(is); 

(我注意到你在OP提到這一點,但其他人可能覺得有用的代碼。)

+0

getClassLoader()可能是多餘的,因爲類具有getResourceAsStream()。 – Powerlord 2009-04-09 17:56:32