2013-03-22 76 views
1

我正在使用Maven onejar插件(https://code.google.com/p/onejar-maven-plugin/)創建uberjar。Maven onejar插件,獲取屬性文件

我要訪問的屬性文件,這是在我的類路徑中這樣根:

Properties prop = new Properties(); 

     try { 
      prop.load(new FileInputStream("Db.properties")); 

      driver = prop.getProperty("driver"); 
      url = prop.getProperty("url"); 
      username = prop.getProperty("username"); 
      password = prop.getProperty("password"); 

     } catch (IOException ex) { 
      LOG.debug(ex.toString()); 
     } 

     conn = null; 

我log4j.properties文件是在同一目錄下找到,因爲我可以做日誌記錄...我的問題是什麼? :/ 但未找到Db.properties。

+0

Db.properties是否打包在jar中? – 2013-03-22 18:07:03

+0

是的,我打開我的提醒.one-jar.jar - > main - > reminder.jar,並在這個jar文件中是我的db.properties文件在相同的路徑log4j.properties – krackmoe 2013-03-22 18:08:26

回答

1

FileInputStream用於從位於文件系統上的文件加載資源。文件系統中沒有jar文件。您需要使用不同的InputStream

對於這種情況,建議使用ClassLoader#getResourceAsStream(String)方法。它返回在類路徑中找到的InputStream資源。例如:

InputStream is = getClass().getClassLoader().getResourceAsStream("/Db.properties"); 

應該工作。或者爲了方便:

InputStream is = getClass().getResourceAsStream("/Db.properties"); 

值得注意的是,log4j.properties作品是因爲Log4j的設計可以在根類路徑加載配置文件的原因。

+1

Mh ...它仍然沒有工作。 InputStream i = getClass()。getResourceAsStream(「Db.properties」); \t嘗試{ \t \t prop.load((FileInputStream)i); – krackmoe 2013-03-22 18:21:47

+0

我懂了!我在Db.properties前加了一個斜槓!謝謝。 – krackmoe 2013-03-22 18:27:48

+0

@krackmoe感謝您的糾正。 – 2013-03-22 18:35:35