2015-10-22 59 views
0

我正在開發一個應用程序,我必須指定一個名爲dao.properties的文件的路徑,它工作得很好,但是當我使用cmd執行jar時:java -jar StockManagement。 jar我得到的錯誤,該文件沒有找到(它在netbeans中工作正常) 類和文件在同一個文件夾中。 我已經嘗試了很多相對路徑並沒有什麼作品,所以這是我最後的希望 這裏是代碼和層次結構:相對路徑在執行jar時不起作用

Hierarchy

​​

感謝Ÿ提前

+0

http://stackoverflow.com/a/7098501/1352766這應該爲您提供一些有關您的問題的信息。 – morganw09dev

+0

你能還張貼您正在使用,以試圖加載文件中的代碼片段? – morganw09dev

+0

我可以在評論中做到嗎? – Sara

回答

0

如果我沒有弄錯,你使用ClassLoader的方式是尋找一個相對於被調用的文件路徑。

從圖中看來,您使用的是DAOFactory類中的ClassLoader,對嗎?你聲明的路徑,你的文件是

stock/DAO/dao.properties 

如果你從DAOFactory調用它時,Java在文件中

<where DAOFactory is>/stock/DAO/dao.properties 

如果DAOFactory和dao.properties駐留在同文件我想你的文件路徑應該只是

dao.properties 

因此,它看起來在DAOFactory是在同一個文件夾中。

編輯:使用DAOFactory類讀取屬性文件。

使用類似下面的代碼片段中,從僅使用的主要方法試試,看看您是否可以讀取屬性文件,而無需任何其他的DAOFactory類調用這個函數。更改您需要在本地機器上工作的任何類或名稱。

public static String getProperty(String property) { 
    String value = ""; 

    try (InputStream is = DAOFactory.class.getResourceAsStream("dao.properties")) { 
    Properties prop = new Properties(); 

    prop.load(is); 
    value = prop.getProperty(property); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

    return value; 
} 
+0

嗨,摩根感謝您的回答 它們位於相同的文件夾中,並且我在發佈之前試過這個,它沒有工作 – Sara

+0

在某些時候,我看到你正在使用線程來嘗試讀取你的屬性文件。如果使用DAOFactory類而不是線程怎麼辦?看看編輯的答案以上? – morganw09dev

+0

這就是我做Morgan的時候,我用DAOFactory代替線程 作爲F illippo suggedted 您的評論也幫了我很多,我瞭解了一些模糊的東西,非常感謝你 – Sara

1

如果你的文件在你的代碼庫中,你應該使用classLoader來加載它。

+0

謝謝菲利波爲你的答案 這正是我在做 – Sara

+0

這通常適用於我this.getClass()。getClassLoader()。getResourceAsStream(path_relative) –

+0

這是我做的我是新的在這裏我不能添加在此評論的圖像,我將在後 – Sara

相關問題