2013-03-06 79 views
0

我有一個通過ant構建的jav aproject。它將類文件寫入output/classes/com/...路徑。我的一個java類需要從位於輸出文件夾上一級文件夾的文件中讀取輸入流。看起來像是如果將文件複製到outptu/classes下的包文件夾中,它似乎工作。但我不想在輸出文件夾中保存我的配置文件,因爲當我做螞蟻清理時它將被清理。我希望它找到它在輸出文件夾上方,在config文件夾中並加載它。getResourceAsStream方法的相對路徑

public static final String CONFIG_FILE="/../../../../../../../Config.txt"; 

public static ConfigObj getConfigObj() throws IOException { 

InputStream i=ConfigLoader.class.getResourceAsStream(CONFIG_FILE); 

...

我想知道什麼時候我想給raltivepath,它應該是相對。我試着向上看,它說相對於類加載器。在這種情況下什麼是類加載器?它是我的ConfigLoader.class所在的輸出/ classes/com ....../config文件夾嗎?

回答

1

問題是getResourceAsStream()將只從類路徑加載資源。我猜你的類路徑上只有output/classes,所以如果在該目錄之外,你將永遠無法通過getResourceAsStream()加載配置文件。使用帶有指向該文件的絕對路徑的File,或將其放入類路徑中。

+0

非常感謝zagyi。但絕對路徑不可移植,是否有其他方式可以給出相對於輸出文件夾的路徑?將目錄添加到類路徑看起來不太友好。 – learningtocode 2013-03-06 21:29:57

+0

如果它實際上是一個用戶配置文件,那麼我猜用戶會根據操作系統特定的約定將它放置在其用戶主目錄下的某個位置。如果你堅持讓它與編譯的類相關,那麼嘗試使用[本文]中描述的技術(http://stackoverflow.com/a/676413/1276804)。不過,我不確定這些解決方案的穩健性。 – zagyi 2013-03-06 21:49:41