2013-03-10 6 views
6

Ich bin ein Problem für diese folgenden Codes gegenüberSchreiben von XML in 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(); 
     } 

Nachdem ich laufen, bekomme ich dieses folgende Fehlermeldung:

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

Es verwendet auf meinem anderen Projekt zu arbeiten, aber diesmal nicht. Was ist hier genau falsch gelaufen?

EDITED:

Hier ist der Weg, den ich in schreiben versuchen. Die Datei wird erstellt, ist jedoch leer.

enter image description here

+2

Gibt es eine Datei auf „/project/MallDirectory/mall/subcompany.xml“? –

+0

Wo befindet sich die Datei? –

+0

Ist/project Ihr Projektname? – Sach

Antwort

18

Ich habe es geschafft, das Problem zu lösen. Hier

ist der Fehler:

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

Ich denke bin vielleicht der Transformator versucht, die xml zu diesem Pfad zu schreiben ‚file: /project/MallDirectory/mall/subcompany.xml‘. Ich weiß nicht, wie es passiert ist, da ich den Dateipfad '/project/MallDirectory/mall/subcompany.xml' festgelegt habe und nicht mit 'file: /' vorangestellt bin.

Deshalb habe ich es irgendwie geschafft, es zu beheben, indem Sie diese:

... 

//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

Charlie - vielen Dank für das Posten. Ich habe das gleiche Problem. Hast du eine Idee, warum wir .getPath() verwenden müssen? Es widersetzt sich jeder Logik, die ich aufbringen kann! Vielen Dank! –

+0

Ich hatte das gleiche, ich denke, StreamResult-Konstruktor korrumpiert den Dateipfad, er sollte mit "file: //" beginnen, zum Beispiel "file: /// tmp/lol". In Ihrem Fall beginnt es mit "file:", trotzdem danke, getPath() hat es gut gemacht. – deathangel908

+0

Danke Kumpel, du hast meinen Tag gemacht! – michoprogrammer

0

Die Anzahl der Dateien, die in geöffnetem Zustand an jedem Punkt der Zeit ist spezifisch für das Betriebssystem (offcourse, kann konfiguriert werden) sein können, und Sie haben die Obergrenze von that.Look im Code erreicht Basis Ihrer Anwendung, wenn Sie Code haben, der versucht, eine Datei zu öffnen, aber den Stream nach der Verwendung nicht schließt. Suchen Sie nach solchen Codes.

0

Der von Ihnen definierte Verzeichnispfad ist falsch. Sehen Sie sich JavaDoc an, um festzustellen, welche Form des Verzeichnispfads Sie für den Speicherort Ihrer Datei benötigen.

JavaDoc java.io.File

+0

ja, irgendwie zeigt meine Maschine auf den anderen Pfad. vielleicht wegen meiner Maschinen OS-Dateisystem. –

0

Wenn "/ Projekt" Name dann Ihr Projekt versuchen "./MallDirectory/mall" anderes versuchen "./project/MallDirectory/mall". Bitte beachten Sie die Zeichenfolge sorgfältig, es enthält Punkt in ihm.

+0

Hallo,/Projekt ist ein Verzeichnis, um alle meine Anwendung Konfigurationsdateien zu speichern. Mein Netbeans-Projekt befindet sich in einem anderen Verzeichnis. –

+0

Können Sie nur Verzeichnisstruktur bereitstellen? Also, es wird sehr einfach zu erklären, was passiert? – Sach

+0

sicher. Ich versuche, eine XML-Datei in/Projekt/MallDirectory/Mall-Ordner zu schreiben./Projekt befindet sich auf meinem Computer Stammordner (Machintosh HD) –