2014-02-21 159 views
0

我正嘗試從java中的XML文件讀取文件路徑,但我得到的文件未找到異常。我不知道如何解決這個問題。任何幫助,將不勝感激。如何從XML文件中讀取文件路徑

這是XML文件:

<adapters> 
     <adapter> 
      <class>adapters.CSVFileAdapter</class> 
      <properties> 
       <property name="filename">C:\test.csv</property> 
      </properties> 
     </adapter> 
     <adapter> 
      <class>adapters.SNMPAdapter</class> 
      <properties> 
       <property name="target">10.100.85.135</property> 
       <property name="port">134</property> 
      </properties> 
     </adapter>  
</adapters> 

這是我的Java代碼:

public class XMLConfigurationReader { 

public static List<String> load() 
{ 
    List<String> adpList = new ArrayList<String>(); 

    try{ 

     DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
     Document doc = docBuilder.parse (new File("C:/myProject/adapters.xml")); 
     doc.normalize(); 

     NodeList rootNodes = doc.getElementsByTagName("adapters"); 
     Node rootNode = rootNodes.item(0); 
     Element rootElement = (Element) rootNode; 
     rootNodes = rootElement.getElementsByTagName("class"); 

     for(int k=0; k<rootNodes.getLength(); k++){ 
      Node theAdapter = rootNodes.item(k); 
      Element adpElement = (Element) theAdapter; 
      adpList.add(adpElement.getTextContent()); 
     } 

     rootNodes = doc.getElementsByTagName("properties"); 
     for (int i = 0; i < rootNodes.getLength(); i++) { // loop for properties 
      Node nodeData = rootNodes.item(i); 
      Element elementColumnDetails = (Element) nodeData; 
      NodeList nodeListRow = elementColumnDetails.getElementsByTagName("property"); 
      for (int j = 0; j < nodeListRow.getLength(); j++) { // loop for property 
       Node nodeRow = nodeListRow.item(j); 
       Element elementRow = (Element) nodeRow; 

       if(elementRow.getAttribute("property") != null){ 
        String property = elementRow.getTextContent().trim(); 
       } 

      } 
     } 

    }catch(ParserConfigurationException e){ 
     e.printStackTrace(); 
    } catch (SAXException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return adpList; 

} 

}

+2

是'C:/ myProject/adapters.xml'路徑是否正確?和堆棧跟蹤也將有所幫助。 – Sanjeev

+0

你的那條路是絕對正確的。這不是那個問題,我認爲這是因爲它不是從XML文件的C:\ test.csv中讀取 – user3216736

+2

堆棧跟蹤請 – Sanjeev

回答

-1

首先要讀取的文件:

public class FileRead { 
    static String string = File.separator; 
    public static void main(String[] args) { 
     File file = new File("C:"+string+"myProject"+string+"adapters.xml"); 
     System.out.println(file.getName()); 
    } 
} 

然後試着測試下面的代碼將幫助你從XML文件獲取名稱:

NodeList nodeListData = xmlTableName.getElementsByTagName("properties"); 
for (int k = 0; k < nodeListData.getLength(); k++) { // loop for properties 
    Node nodeData = nodeListData.item(k); 
    Element elementColumnDetails = (Element) nodeData; 
    NodeList nodeListRow = elementColumnDetails.getElementsByTagName("property); 
    for (int l = 0; l < nodeListRow.getLength(); l++) { // loop for property 
     Node nodeRow = nodeListRow.item(l); 
     Element elementRow = (Element) nodeRow; 
     if(elementRow.getAttribute("filename")){ 
      filePath = elementRow.getTextContent().trim(); 
     } 
    } 
} 
+0

我認爲這個問題是不同的。他無法讀取adapters.xml本身。 – AJJ

+0

問題提到了兩個問題,1.「我試圖從Java中的XML文件中讀取文件路徑」,2.「我得到的文件未找到異常」 –

+0

@Suzon,此代碼有效,謝謝你的,但是有沒有方法可以返回節點中的內容? – user3216736

1

問題與您的代碼是在這一行

adaptersList.item(0).getChildNodes().item(0).getNodeValue(); 

它應該

adaptersList.item(0).getTextContent(); 

爲了給你的路徑名來代替。

相關問題