2012-02-27 90 views
1

使用下面的代碼片段我拋出一個空指針異常,但我找不到理由:java的相對路徑

String path = ResourcesLoader.class.getResource("src/i3d/resourcesloader/libraries/lib.txt").toString(); 

enter image description here

現在用我的getResources錯了嗎?我甚至試圖輸入完整的路徑,如「D:\ Workspace ...」,雙反斜槓,雙正斜槓,但我得到空指針異常。我沒有嘗試過的唯一的事情是使用java的路徑分隔符,但是這個時候在Windows上運行時應該不是問題。我錯過了什麼?

謝謝!

+1

什麼I3D/resourcesloader /庫/ lib.txt – nidhin 2012-02-27 14:28:25

+0

如果去掉SRC部分從您的路徑會發生什麼? – 2012-02-27 14:29:19

+0

只需使用/libraries/lib.txt – Kayser 2012-02-27 14:33:01

回答

3

getResourcesearches via the classloader,所以通常在類路徑簡化。 src文件夾不在類路徑中 - 它只存在於構建中。根據您的構建系統(ANT,Maven,IDE內部),資源文件夾可能會合併到類路徑中。將資源直接放入源文件夾中,該文件夾也可以工作(如果構建過程將所有非Java資源複製到類輸出文件夾,或者源文件夾用於生成類的輸出)。

/是你的資源的根,如果你使用絕對資源位置。它相當於src文件夾中的根/i3d/resourcesloader/libraries/lib.txt將是訪問資源的正確方法。

將構建工具合併的單獨文件夾中的資源分開會更好(例如,在Maven中:/src/main/java/src/main/resources)。

+0

'/ i3d/resourcesloader/libraries/lib.txt'工作得很好,thx。 – MRM 2012-02-28 09:32:28

+0

......它看起來像如果我使用'/ I3D/resourcesloader /庫/ lib.txt'我不能把這個字符串到一個文件的構造,因爲它就像它創建一個空文件,不能與現有的連接處那個地址。相反,如果我在File構造函數中使用'src/i3d/resourcesloader/libraries/lib.txt',它會讀取現有的文件。我很困惑! – MRM 2012-02-28 11:54:48

+0

'getResource'返回一個'URL'。使用這個,不要'toString'。更好的是:在大多數情況下,您只需使用'getResourceAsStream',不需要任何手動處理文件句柄。 – 2012-02-28 13:08:29

1

看來你使用的是NetBeans?

只需創建一個名爲src\resources的文件夾,將文件放在那裏,然後致電this.getClass().getResource("lib.txt");

建設時,NetBeans將包裝,妥善和資源將在罐內的主文件夾,這樣你就可以不必指定他們的文件夾中獲得。

+0

我已經試過你的方式,但它似乎簡化版,要查找的文件;還有空指針。使用'/ i3d/resourcesloader/libraries/lib.txt'可以工作。 – MRM 2012-02-28 09:27:23

1

你應該只提供相對路徑從你的類加載點(不src IE):

String path = ResourcesLoader.class.getResource("/i3d/resourcesloader/libraries/lib.txt").toString();