2015-11-03 54 views
1

我想計算放入使用此實現源代碼包中的文件的路徑:如何不硬編碼的文件路徑

URL pathSource = this.getClass().getResource("saveItem.xml"); 

當我試圖創建類似下面的代碼創建一個新文件:

File xmlFile = new File(pathSource.toString()); 

我試着用它來創建這樣一個文件:

Document document = builder.parse(xmlFile); 

這給我java.io.FileNotFoundException。 如何在沒有硬編碼的情況下計算文件路徑?

PS:我已經使用了pathSource.getPath(),但它也不起作用。 我想用一個類似的實現:

FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); 

PPS:結構如下: image

+0

您是從一個罐子或從IDE中運行呢? – RealSkeptic

回答

2

您無法訪問JAR文件內部的資源作爲File實例。你只能得到一個InputStream它。

因此,下面一行

File xmlFile = new File(pathSource.toString()); 

將無法​​正常工作,當試圖後來讀它,一個FileNotFoundException將被拋出。

假設你試圖解析使用DocumentBuilder一個XML文件,你可以使用parse(InputStream)方法:

try (InputStream stream = this.getClass().getResourceAsStream("saveItem.xml")) { 
    Document document = builder.parse(stream); 
} 
0

簡短的回答 - saveItem.xml是不是在classpath中。 如果它是一個Web應用程序,那麼文件可能會被添加到WEB-INF/classes文件夾中。

編輯: 嘗試this.getClass().getResourceAsStream()也。

0
getClass().getResource("saveItem.xml"); 

會在同一個包中的文件(該文件是目錄,當你在文件系統)作爲類getClass()回報。

確保文件在那裏。當你運行代碼時,確保它真的在那裏,你的源文件夾和放置已編譯的類文件的文件夾targetbin之間是有區別的。

另請檢查pathSource.toString()包含的內容。

+1

檢查編輯的結構,謝謝! –