2016-12-31 45 views
0

我想讀取使用Properties.load(); maven自然項目中的屬性文件我指定一個路徑作爲字符串ex。 "./someFolder/file.properties", 但是當我嘗試在其他項目中使用我的項目作爲依賴項時,我不得不將這些文件複製到另一個項目中,因爲"."意味着當前目錄。 有沒有一種方法來指定一個路徑,所以它總是有效的,儘管我從哪裏調用它? , 我嘗試過使用MyClass.class.getClassLoader().getResourceAsStream(),但我在使用它時遇到了麻煩,它有時會有效並且在其他時間失敗。什麼是指定從類路徑讀取路徑,即使項目是一個罐子的最佳方式

回答

1

你的問題有很多誤解。

「。」裝置類路徑

號當文件系統路徑內(即一個路徑傳遞給一個文件的構造,或的FileReader,或的FileInputStream)使用的,「」表示當前目錄。

當用於資源路徑(即傳遞到Class[Loader].getResource[AsStream]())時,它是無效的。

訣竅是仔細閱讀文檔。

getResourceAsStream()預計/-分離的路徑。

使用ClassLoader.getResource[AsStream]()時,此路徑始終從類路徑的根開始。所以你會傳遞一個完全合格的類名稱的路徑,除了點將被斜槓替換。因此,com/foo/bar.properties在包com.foo中查找名爲bar.properties的資源。

當使用SomeClass.class.getResource[AsStream](),或者路徑以/開始,該路徑從類路徑的根開始,或沒有,並且它從包裝SomeClass的的開始。因此,如果SomeClass在包com.foo中,則使用/com/foo/bar.properties相當於使用bar.properties

因爲你沒有提供任何細節,所以很難說出你做錯了什麼。但是您真的需要了解在文件系統上打開文件和讀取由類加載器加載的資源之間的區別。有時候,資源恰好是由類加載器從文件系統加載的,因爲類路徑恰好包含目錄,而不僅僅是jar文件。

+0

感謝您的糾正,是的這意味着當前路徑不是類路徑 – SaleemKhair

0

我注意到我的問題是我的項目路徑本身有我的屬性文件,並且ClassLoader.getResource[AsStream]();看起來是target/classes文件夾,並且我的項目中沒有資源文件夾。

我解決它在我加入的資源文件夾到我的構建路徑,添加我的文件在src/main/resources爲以下src/main/resources/foo/bar.propertiesSomeClass.class.getClassLoader().loadResourceAsStream("foo/bar.properties");加載它。

相關問題