2011-09-29 70 views
6

我正在嘗試使用Class.getResource("rsc/my_resource_file.txt")在Eclipse應用程序中加載文件。但是,不管我在Eclipse做classpath中始終只包含一個條目到Eclipse啓動:Class.getResource()在我的Eclipse應用程序中返回null?無法配置類路徑?

... /日蝕/插件/ org.eclipse.equinox.launcher_1.2.0.v20110502.pkc

如何配置類路徑?

注:在運行時,我確定類路徑下面的代碼:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader(); 
for (URL classpathURL : cl.getURLs()) { 
    System.out.println(classpathURL); 
} 

編輯:進一步信息。

問題的根源在於Class.getResource("rsc/my_resource_file.txt")返回null。在一個簡單的5行「Java應用程序」中完成了一些小實驗之後,我想我已經弄明白了,並且問題與類路徑有關。顯然,類路徑與「Eclipse應用程序」有些不同。我通過做Class.getResource("/rsc/my_resource_file.txt")解決了問題,謝謝BalusC。

+1

您可以退後一步嗎?你的具體問題是資源返回'null',對吧?你確定它的道路是正確的嗎?正如你所看到的,它與當前類的包相關。不應該以'/'開始的路徑是相對於包根?至少,Eclipse啓動程序不是在這裏責怪。 – BalusC

+0

@ BalusC - 你是對的,我曾認爲/將是文件系統上的絕對路徑。如果您將此作爲答案,我會接受它。 – Buttons840

+0

我發佈了一個答案。 Classpath不得與本地磁盤文件系統混淆。 – BalusC

回答

8

請退後一步。您的具體問題是資源返回null,對不對?你確定它的道路是正確的嗎?正如你所看到的,它與當前類的包相關。不應該以/開頭的路徑相對於軟件包根目錄?

URL resource = getClass().getResource("/rsc/my_resource_file.txt"); 
// ... 

或者,您也可以使用上下文類加載器,它總是相對於類路徑(包)根:

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
URL resource = loader.getResource("rsc/my_resource_file.txt"); 
// ... 

至少,Eclipse啓動程序是不是在這裏指責。

3

右鍵單擊該項目並按照屬性。

+0

我有同樣的問題,這是因爲我包含了類路徑中的根目錄 –

3

將文件放在源代碼樹的頂層目錄中。這通常被稱爲「src」。 然後,當你建立你的項目時,文件將被複制到你的課程目錄中(名稱不同)。最後,構建文件將在您的類路徑中(在eclipse環境中)。

Class someClassObject = BlammyClassName.class; 
someClassObject.getResource("my_resource_file.txt"); 

將返回一個URL到您的資源。

someClassObject.getResourceAsStream("my_resource_file.txt"); 

將返回一個流。

編輯:更改,使它不會靜態引用類方法。

+0

這些方法不是'static',即使那樣,它也不會解決OP使用依賴於上下文的相對路徑的具體問題 – BalusC

+0

我發現這在早期測試中是一個有效的解決方法,但我不應該將資源文件放在我的src文件夾中,而是將資源文件夾/文件到構建路徑。 – Buttons840

相關問題