2017-04-17 50 views
0

我有以下來源結構:如何在Java中加載資源文件?

src 
    resources 
     config.properties 
     data.txt 

我將這些文件複製到我的罐子,無需壓縮。所以jar包含resources/config.propertiesresources/data.txt

在本地運行(Eclipse:Run as | Run Configurations)並執行jar時,config.properties可以正常工作。

private static final String CONFIGURATION_FILE_PATH = "resources/config.properties"; 
resourceInputStream = classLoader.getResourceAsStream(CONFIGURATION_FILE_PATH); 
configurationProperties.load(resourceInputStream); 

data.txt文件本地工作(Eclipse的:作爲運行|運行配置),但在執行時,罐子找不到。我確實需要創建的File對象,因爲我將它傳遞給第三方庫。

private static final String DATA_FILE_PATH = "resources/data.txt"; 
URL resourceUrl = classLoader.getResource(DATA_FILE_PATH); 
File file = resourceUrl == null ? null : new File(resourceUrl.getPath()); 

當執行jar時,file爲空。

這是執行問題嗎?

我打電話給Jenkins的罐子jar /build/myapp.jar。我應該爲此執行設置類路徑嗎?我的意思是-cp切換..?

打開到其他負載選項

如以上所提到的,config.properties加載罰款。我不需要我的data.txt加載getResource。我接受其他方法。只要我能從中得到File

+0

從斜線開始例如「/resources/data.txt」 – markspace

+0

我試過了,但是本地運行失敗。即使這會使罐子工作,我仍然需要它在本地工作。 – user6651485

+1

我們需要更多關於「本地運行」的信息,因爲它適合我。 – markspace

回答

0

對於Java資源,您必須使用斜槓啓動資源名稱,以使其絕對或相對於Jar層次結構的頂部。

不以斜槓開頭的資源名稱與加載它們的類的當前位置(包名稱/目錄)有關。

+0

Mark,你確定你有'src/resources'結構嗎?我猜測,但你可能有資源文件直接在項目文件夾下。 – user6651485

+0

src是NetBeans默認使用的Java標準目錄結構的一部分。 src永遠不會包含在路徑名/類路徑中;它總是比你的二進制文件實際所在的位置高一級。 – markspace

+0

但是資源被複制到目標目錄(與編譯目標相同)而不會展平。我在我的問題中提到了這一點。所以沒有必要討論src。 – user6651485