2012-05-08 5 views
6

Ich habe diese seltsame Sache mit Eingabe-und Ausgabe-Streams, die ich einfach nicht verstehen kann. Ich benutze Input Eigenschaften von Ressourcen wie diese Datei zu lesen:JAVA: FileInputStream und FileOutputStream

Properties prop = new Properties(); 
InputStream in = getClass().getResourceAsStream("/resources/SQL.properties"); 
rop.load(in); 
return prop; 

Es ist meine Datei findet und Rottöne es erfolgreich. Ich versuche Modifizierte Einstellungen, wie dieses zu schreiben:

prop.store(new FileOutputStream("/resources/SQL.properties"), null); 

Und ich seltsame Fehler von der Speicherung bekommen:

java.io.FileNotFoundException: \resources\SQL.properties (The system cannot find the path specified) 

Warum Pfad Eigenschaften geändert werden? Wie behebe ich das? Ich Netbeans auf Windows

+1

Willkommen bei SO. +1 für eine gut formulierte Frage mit allen passenden Informationen. –

Antwort

3

Vielleicht ist es

try 
{ 
java.net.URL url = this.getClass().getResource("/resources/SQL.properties"); 

java.io.FileInputStream pin = new java.io.FileInputStream(url.getFile()); 

java.util.Properties props = new java.util.Properties(); 

props.load(pin); 
} 
catch(Exception ex) 
{ 
ex.printStackTrace(); 
} 

funktioniert und überprüfen Sie die folgenden URL

getResourceAsStream() vs FileInputStream

+0

Probieren Sie diese Methode, wird bald schreiben, wenn es funktioniert – gedO

+0

Das hat für mich funktioniert :) – gedO

6

Das Problem ist, dass getResourceAsStream() ist die Lösung den Weg geben Sie es in Bezug auf den Classpath, während new FileOutputStream() erstellt die Datei direkt im Dateisystem verwenden. Sie haben unterschiedliche Startpunkte für den Pfad.

Im Allgemeinen können Sie nicht auf den Quellspeicherort zurückschreiben, von dem eine Ressource geladen wurde, da sie möglicherweise gar nicht im Dateisystem vorhanden ist. Es kann zum Beispiel in einer Jar-Datei sein und die JVM wird die JAR-Datei nicht aktualisieren.

+1

Können Sie mir ein Beispiel geben, wie man es richtig schreibt? – gedO

+0

Sie können es nicht richtig schreiben. Sie können im Allgemeinen nicht in den Speicherort schreiben, von dem eine Ressource geladen wurde. Es ist möglicherweise nicht an einem beschreibbaren Speicherort vorhanden. –

+0

+1 wie dies perfekt erklärt, warum ich dieses Problem habe. – nathj07