2013-03-10 47 views
6

我面臨的一些問題,這個下面的代碼編寫XML中的Java FileNotFoundException異常

 try { 
      DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 

      //root elements 
      Document doc = docBuilder.newDocument(); 

      Element rootElement = doc.createElement("subcompany"); 
      doc.appendChild(rootElement); 

      //id elements 
      Element id = doc.createElement("id"); 
      id.appendChild(doc.createTextNode(subCompanyId != null ? subCompanyId : " ")); 
      rootElement.appendChild(id); 

      TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
      Transformer transformer = transformerFactory.newTransformer(); 
      DOMSource source = new DOMSource(doc); 

      transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
      transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); 

      String xmlPath = "/project/MallDirectory/mall"; 

      //EDITED for File creation before writing. 
      boolean isFileCreated = new File(xmlPath, "subcompany.xml").createNewFile(); 
      System.out.println(isFileCreated);     

      StreamResult result = new StreamResult(new File(xmlPath, "subcompany.xml")); 

      transformer.transform(source, result); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

我運行後,我得到這個以下錯誤:

javax.xml.transform.TransformerException: java.io.FileNotFoundException: file:/project/MallDirectory/mall/subcompany.xml (No such file or directory) 

它曾經在我的其他項目上工作,但是這次不是。這裏究竟發生了什麼問題?

編輯:

這裏是我想寫進入路徑。該文件已創建,但爲空。

enter image description here

+2

有沒有在「/project/MallDirectory/mall/subcompany.xml」文件? – 2013-03-10 15:40:09

+0

文件位於何處? – 2013-03-10 15:40:19

+0

/project是你的項目名稱嗎? – Sach 2013-03-10 15:41:46

回答

18

我設法解決了這個問題。

以下是錯誤:

javax.xml.transform.TransformerException: java.io.FileNotFoundException: file:/project/MallDirectory/mall/subcompany.xml (No such file or directory) 

我想,也許變壓器試圖將XML寫入此路徑「文件:/project/MallDirectory/mall/subcompany.xml」。我不知道它是如何發生的,因爲我已經專門設置了文件路徑'/project/MallDirectory/mall/subcompany.xml',並且沒有以'file:/'作爲前綴。

因此,我總算通過這樣做是爲了解決它:

... 

//ERROR CODE: 
//StreamResult result = new StreamResult(new File(xmlPath, "subcompany.xml")); 
// 
StreamResult result = new StreamResult(new File(xmlPath, "subcompany.xml").getPath()); 
transformer.transform(source, result); 

... 
+0

查理 - 非常感謝發佈這個。我遇到同樣的問題。你知道爲什麼我們必須使用.getPath()嗎?它無視我可以鼓起的任何邏輯!謝謝! – 2014-02-11 11:26:24

+0

我有同樣的,我認爲StreamResult構造函數損壞文件路徑,它以「file://」開頭,例如「file:/// tmp/lol」。在你的情況下,它以「file:」開頭,無論如何謝謝,getPath()表現良好。 – deathangel908 2015-10-21 10:20:35

+0

謝謝你的伴侶,你讓我的一天! – michoprogrammer 2016-10-21 12:36:38

0

文件,可以在任何時間點處於打開狀態的數量是特定的OS(offcourse,可配置),你已經在代碼達到that.Look的上限你的應用程序的基礎,當你有一些代碼試圖打開一個文件,但沒有關閉流使用後。檢查這樣的代碼。

0

您定義的目錄路徑不正確。查看JavaDoc以確定需要到達文件位置的目錄路徑。

JavaDoc java.io.File

+0

是的,不知何故,我的機器指向不同的路徑。也許是因爲我的機器OS文件系統。 – 2013-03-11 04:22:31

0

如果 「/項目」 是您的項目名稱,然後嘗試 「./MallDirectory/mall」 別的嘗試 「./project/MallDirectory/mall」。請仔細觀察包含點的字符串。

+0

嗨,/項目是一個目錄來存儲我所有的應用程序配置文件。我的netbeans項目駐留在不同的目錄中。 – 2013-03-10 15:52:32

+0

你能提供目錄結構嗎?那麼,解釋發生的事情會很容易? – Sach 2013-03-10 15:54:37

+0

當然。我正嘗試在/ project/MallDirectory/mall文件夾中編寫一個xml文件。 /項目位於我的機器根文件夾(Machintosh HD) – 2013-03-10 15:57:05

相關問題