Input/Output Einlesen von mehreren Zeilen

kaoZ

Top Contributor
Ich habe eine kleine Verständnissfrage, und zwar bekomme ich wenn ich auf folgende art ein Dokument einlese :

Java:
package versuche;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Reader 
{
	
	//Erstellt Instanzvariablen und liest den File ein 
	
	private String output, line;
	File file = new File("H://Apps/Test.txt");
	
	public static void main(String[] args) throws IOException 
	{
		
		//Erstellt neues Reader Objekt und führt Methode read auf dieser aus
		new Reader().read();
	}

	private void read() throws IOException 
	{
		//Erstellt neues BufferedReader Objekt welches einen neuen FileReader umgibt
		BufferedReader br = new BufferedReader(new FileReader(file));
		
		/*ließt Zeilen ein solange Zeilen im dokument "file" vorhanden sind und 
		*speichert diese in einem String */
		while((line = br.readLine()) != null)
		{
			output += "\n" + line; // Zeilenumbrüche nach jeder eingelesenen Zeile "\n"
		}
		br.close();
		System.out.println(output);
	}

}

in der ersten Zeile der Ausgabe "null", sprich wenn ich nun versuche auf line.lenght() zuzugreifen führt dieses zu einer NullPointerException, frage ist nun warum genau stimmt die ausgabe ausser in der ersten Zeile , diese verschiebt er mir in die 2te Zeile , also geht zumindest nichts verloren aber trotzdem frage ich mich warum er dort null ausgibt .

Text :

Java:
Test
Hallo
Welt

Ausgabe :
Java:
null
Test
Hallo
Welt
 
Zuletzt bearbeitet:
das liegt daran, dass dein output String anfangs noch uninitialisiert ist und du an diesen uninitialisierten String einfach ein
Code:
"\n" + line;
dranhängst.

schreib mal oben wo du die Strings deklarierst
Code:
output = ""
hin, vlt. verstehst du dann dein Problem von selbst...
 
Argh. ich vergesse es aber auch immer wieder ^^

Allerdings gibt er mir wenn ich so initialisiere

Java:
private String output ="", line;

in der Ausgabe der ersten Zeile es halt auch so aus und fängt erst in der 2ten Zeile mit der eigentlichen Ausgabe an

Ausgabe in Zeile 1 wäre dann lediglich eine Leere Zeile , oder muss ich die dann über eine Anweisung entfernen ?

bzw könnte man ja auch die Zeilen in einer Arraylist speichern und einfach ohne die erste Zeile ausgeben lassen .

wobei die leere Zeile auch an
Java:
"\n" liegen könnte
[EDIT]
Jop liegt an dem Zeilen Umbruch, ich löse das ganze jezt indem ich die Strings aus den Zeilen in einem Array Speichere und erst dann auslese und mir die Strings ausgeben lasse , danke nochmal für den wink mit dem Zaunpfahl ^^:toll:
[/EDIT]
 
Zuletzt bearbeitet:
wobei die leere Zeile auch an
Java Code: Open source code in new window
"\n" liegen könnte

und genau an dem liegt es auch. Du hängst mit += ein \n an einen leerstring dran. Versuchs mal mit
Code:
output += line+ "\n";
 
Java:
package versuche;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class Reader 
{
	
	//Erstellt Instanzvariablen und liest den File ein 
	
	private String output ="", line;
	ArrayList<String> list = new ArrayList<String>();
	File file = new File("H://Apps/Test.txt");
	
	public static void main(String[] args) throws IOException 
	{
		//Erstellt neues Reader Objekt und führt Methode read aus
		new Reader().read();
	}

	private void read() throws IOException 
	{
		//Erstellt neues BufferedReader Objekt welches einen neuen FileReader umgibt
		BufferedReader br = new BufferedReader(new FileReader(file));
		
		/*ließt Zeilen ein solange Zeilen im dokument "file" vorhanden sind und 
		*speichert dies in einem String */
		while((line = br.readLine()) != null)
		{
			list.add(line); // Speichert die Zeilen in der Arraylist
		}
		//Iteriert über alle Elemente in der Arraylist und speichert diese in String a / dann in output
		for(String a : list)
		{
			output += a + "\n";
		}

		br.close();
		System.out.print(output);
	}

}

läuft !
 

Zurück
Oben