2016-04-27 109 views
0

我想用應該讀取我的資源文件夾內的XML文件的方法來編寫助手類,並獲取我將在我的主類中工作的一些值。 我的項目結構如下:從助手類中讀取資源

Project 
| 
|---src 
| | 
| |---Main.class 
| | 
| |---Helper.class 
| 
|---resources 
    | 
    |---MYDOC.xml 

而對於Helper.class我想出了到目前爲止的代碼是:

public class HelperClass { 


static Document document; 
static XPath xPath; 

公共助手類(){

try { 

     InputStream stream = HelperClass.class.getResourceAsStream("MYDOC.xml"); 

     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = builderFactory.newDocumentBuilder(); 

     document = builder.parse(stream); 
     xPath = XPathFactory.newInstance().newXPath();  

     } 
     catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     } catch (SAXException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
     } 

    }; 

static String getValue(){

String result = ""; 

String expression = "/SOMETHING/SOMETHING/VALUE"; 
try { 
    result = xPath.evaluate(expression, document); 
} catch (XPathExpressionException e) { 
    e.printStackTrace(); 
} 
return result; 

}}

我已經設置了資源文件夾作爲源文件夾,試圖文件路徑的多種組合(/MYDOC.xml,資源/ MYDOC.xml等),但是當我我總是一個NullPointerException嘗試使用Main.class中的getValue()方法。

如果有人能解釋我做錯了什麼或解決這個問題的更好方法,我將不勝感激,但我懷疑基本上我的整個代碼是不好的。

總結:我想創建一個HelperClass,它讀取並獲取xml文件中的值,然後在另一個類中使用這些方法。

非常感謝您的幫助/回答/評論。

+0

編譯到一個.jar文件,並期待通過一個zip實用程序進入它。它應該包含MYDOC.xml。如果沒有資源必須是IDE中的源文件夾。如果在jar文件中路徑是resources/MYDOC.xml,那麼使用它作爲相對或絕對路徑「/resources/MYDOC.xml」。並介意區分大小寫的文字。 –

+0

轉到你的類文件夾,你能看到xml文件以及你的.class文件嗎? –

+0

@JoopEggen編譯它,文件在裏面。 –

回答

0

在類路徑如果XML是資源文件夾中嘗試

HelperClass.class.getClassLoader().getResourceAsStream("resources/MYDOC.xml"); 

如果XML是直接在類路徑下,然後嘗試

HelperClass.class.getClassLoader().getResourceAsStream("MYDOC.xml"); 
+0

嘗試了這兩個選項,資源文件夾內的文件和類旁邊,我仍然得到一個NullPointerException當我在我的Main.class中使用方法getValue()。 –

+0

讓我感到困惑的是,當我將整個Helper.class代碼放入一個方法(添加了返回類型的字符串)時,一切正常。但是當我像上面那樣分離代碼時,會拋出一個NullPointerException異常。 –

+0

你的Helperclass和Mian類是否在同一個包中?你可以試試這個嗎?在您的方法中將.xml作爲ResourceAsStream讀取。然後將Stream傳遞給helper calss方法來完成其餘的邏輯。只是一個試驗。不是解決方案。 –