2014-01-18 111 views
0

我正在嘗試讀取下面的類中的xml配置。它運行時運行它。但是當我將它導出到Runnable Jar.The文件不被讀取..? ?如何使用getResourceAsStream讀取XML文件

public KeyTranslator() { 
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
       String sPath = "res/config.xml"; 



    //InputStream is = (InputStream) Thread.currentThread().getContextClassLoader().getResourceAsStream(sPath); 
    //InputStream is = this.getClass().getResourceAsStream((sPath); 

       try { 
         DocumentBuilder builder = factory.newDocumentBuilder(); 
         if (AppFrame.jar == null) { 
           this.myDoc = builder.parse(new File((AppFrame.basePath+sPath).replace('\\', '/')));//ensure seperator is '/' as linux is picky 
         } else { 
           this.myDoc = builder.parse(AppFrame.jar.getInputStream(AppFrame.jar.getJarEntry(sPath))); 
         } 
      } 

我GOOGLE了&發現的getResourceAsStream method.But似乎拋出FileNotFoundException異常。 &我不知道如何在我的代碼中添加InputSream?

所以幫我在正確的方向:)

感謝您的幫助......

注意 我試過的方法進行了報道

+0

你加罐子類路徑? – lakshman

+0

看看[這](https://stackoverflow.com/questions/20963531/why-do-i-need-to-include-classloader-getsystemresourcesasstream-when-parsing-a/20963663#20963663),它可以幫助你。 –

回答

0

Atlast找到如何使用getResourceAsStream .The下面行不魔術

this.myDoc = builder.parse((getClass().getResourceAsStream("/xml/config.xml"))); 

Thankz所有的答案.....

0

但似乎扔FileNotFoundException

最可能的原因是路徑ame到文件是不正確的。

您似乎使用"res/config.xml"作爲路徑名。這是一個相對路徑名,相對路徑名是相對於當前目錄;例如您嘗試啓動JAR時的目錄。 (請注意,如果使用「/」或「\」作爲路徑分隔符,則無關緊要。無論運行時平臺如何,Java的用於打開文件的內置類都可以應對任何一種形式。 )

+0

如果路徑錯誤。那麼當我運行時它是如何工作的? – AruLNadhaN

+0

由於當前目錄不同。你知道「當前目錄」實際上是什麼意思嗎? –

+0

查看圖片。編輯代碼併發帖。我無法收到你...請問 – AruLNadhaN

0

從classpath中讀取 - 在配置路徑方面非常靈活。這裏是:How to really read text file from classpath in Java

順便說一句,以避免更換反斜槓和斜線在Win和Unix上運行使用File.separator。例如:"res" + File.separator + "config.xml"。您也可以使用new File("res", "config.xml")

+0

運行它時正在工作。但是當我將其導出到可運行Jar中時。 – AruLNadhaN

+0

當你運行你的jar時檢查你的classpath。它是'java -cp'或'-classpath'參數。它應該有罐子。 –