2013-03-22 16 views
0

我在Eclipse中有一個Java應用程序,它引用.XML文件作爲其他功能的模板。通常我不打包這些文件中的.jar文件,因爲將它們放在同一文件夾中的.jar文件中似乎做工精細與此引用:從與應用程序相同的JAR文件中引用文件

File myFile = new File("templates/templateA.xsd"); 

我現在要求這些模板被放置在同一個。 JAR文件作爲這個應用程序。我可以包括他們沒有問題,但這些參考不再起作用。

在應用程序運行的相同.JAR中是否有正確的方式引用.XML文件?

回答

1

如果你只是需要讀取這個文件,你可能不需要的java.io.File只是一個InputStream,你可以通過

this.getClass().getResourceAsStream("templates/templateA.xsd") 

得到,如果你真的需要一個java.io.File中。 ..我不知道...上一次真的需要一個文件,我只是將InputStream複製到一個臨時文件,但這很醜陋。

+0

我在這裏有同樣的問題,我在上面的評論中提到。用我當前的文件層次結構,我總是以null輸入流結束。 – ricgeorge 2013-03-22 09:58:20

+0

這是因爲路徑相對於.java,它在'this.getClass()。getResourceAsStream(「templates/templateA.xsd」)'中執行'.getClass()'。 您可以嘗試使用System類:'System.getClass()。getResourceAsStream(「templates/templateA.xsd」)''或簡單地將資源文件放在與使用它的java類相同的目錄中,並使用'this。的getClass()。的getResourceAsStream( 「templateA.xsd」)」。 – user2147970 2013-03-22 10:13:38

+0

使用系統給我一個有關從非靜態方法getClass()進行靜態引用的錯誤。移動文件不幸的是不是一個真正的選擇。 – ricgeorge 2013-03-22 10:37:51

2

您需要知道如何從類路徑加載文件。 的方式之一是如下

class XMLLoader { 

    public String loadXML(String fileName){ 
     InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName); 
    // do the loading of the file from the given input stream. 
    } 

}你知道的「模板」文件夾中應該是你的罐子裏面

+0

我以前見過這個實現,但每當我嘗試它時,我都會得到一個空輸入流。我有一個使用此代碼的稱爲XML Loader的單獨類。這意味着該類當然位於src文件夾中。我需要的xml文件位於源文件夾之前,名爲Templates的根目錄下。 – ricgeorge 2013-03-22 09:54:17

+0

請檢查是否正確的jar是你的班級路徑的一部分。 – nvseenu 2013-03-25 11:18:25

相關問題