FileReader oder BufferedReader Problem

chett

Grünschnabel
Hi, ich entwickle eine Anwendung, die sich ihre Konfiguration aus einer Datei holen soll.
An sich kein Problem...
Wird die Applikation zum ersten mal gestartet, wird die zu gehörige Konfig Datei erstellt und der nutzer aufgefordert diese zu editieren.
Hier der Code dazu:
Code:
private static void createConfig() {
		// TODO Auto-generated method stub
		File config=new File("/discovery/upnp/config");
		try {
			FileWriter fw = new FileWriter(config);
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write("Zeitabstand zwischen Suchläufen (min):\"\";\n" ); bw.newLine();
			bw.write("DB Lokation:\"\";"); bw.newLine();
			bw.write("DB Port:\"\";"); bw.newLine();
			bw.write("DB User:\"\";"); bw.newLine();
			bw.write("DB Passwort:\"\";"); bw.newLine();
			bw.close();
			
		} catch (IOException ioe) {
			// TODO Auto-generated catch block
			JOptionPane.showMessageDialog(null, "Datei konnte nicht erstellt werden"+ioe);
		}
		
		
	}

Das funktioniert auch wunderbar, ich kann mir das File ankucken und es steht allse so drin wie ich mir das dachte...

Beim nächsten Start der Anwendung wird überprüft ob ne config Datei hinterlegt ist, und diese dann ausgelesen...
Hier der Code zum auslesen der config:
Code:
private static void readConfig() {
	
		// TODO Auto-generated method stub
		JOptionPane.showMessageDialog(null, "Lese Config");
		try {
			File config = new File("/discovery/upnp/config");
			FileReader fr = new FileReader(config);
			BufferedReader br = new BufferedReader(fr);
			while (br.readLine()!=null)
				debug("inhalt der Datei:"+br.readLine());
//			debug("File2string: "+config.);
			br.close();
		} catch (Exception e) {
			// TODO: handle exception
			debug("Fehler beim lesen der Config" + e);
		
		}		 
		
	}

Die Debug funktion ist nur ne System.out.println... abkürzung...
Da kommt aber das Problem, anstatt der erwarteten Ausgabe von vier Zeilen,
bekomme ich in der Konsole folgendes zu sehen:
Code:
inhalt der Datei:DB Lokation:"";
inhalt der Datei:DB User:"";
inhalt der Datei:null

Also nur Zeile 2 und 4und die leere Zeile fünf... :confused:
warum


Danke für jeden Tip...

Btw... Frohe Ostern!
 

zeja

Erfahrenes Mitglied
Du rufst auch pro Schleifendurchlauf zweimal readLine auf, also wird auch zweimal gelesen und damit erklärt sich dann doch denke ich recht schnell die Ausgabe.

Richtig isses so:
Java:
String line = null;
while((line=br.readLine)!=null){
   System.out.println(line);
}

Das ist am Anfang ein wenig verwirrend zu lesen: Es erfolgt erst die Zuweisung von br.readLine an line und dann der vergleich mit null, was dem Vergleich von line mit null entspricht.

Wenn du nicht so auf ein bestimmtes Format festgelegt bist, könntest du allerdings auch die Klasse Properties verwenden. Diese kann mit load aus einer Datei laden und mit store gespeichert werden.

Das Format ist
Schlüssel = Wert

Abfragen von einem Wert zu einem Schlüssel geht mit
Object value = getProperty(key);
 

chett

Grünschnabel
Ah, du hast du recht!
Liest etwas komisch, funktioniert aber tadellos!

Werde mir später aber auch noch die Klasse Properties anschauen!

Danke für die Hilfe!
 

Neue Beiträge