Einlesen und Auslesen einer Textdatei in Java

Homiee

Grünschnabel
Hallo!!

Ich hab da ein Problem...und zwar hab ich folgende Aufgabenstellung bekommen.
Ich soll 6 Studenten zunächst unsortiert in eine Textdatei schreiben und abspeichern.
Die Textdatei sieht bei mir so aus:
vorname hans
nachname Glück
telefonnummer 2345566
matrikelnummer 333344

usw....

Nun soll ich diese Textdatei einlesen und und die Studenten jeweils unsortiert in eine verkettete Liste einfügen....bei mir scheiterts schon beim einlesen dieser Textdatei...vorerst möchte ich nur die Datei einlesen und wieda ausgeben...hier mein bisheriges Programmstück.:
Java:
public class Ausführung {

	public static void main(String[] args){
		
	
	FileReader file=null;
	try{
	file = new FileReader("C:/Users/dok/Studenten.txt");
	}
	
	 catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	 BufferedReader reader= new BufferedReader(file);
	System.out.println(file);
}
}
kann mir einer sagen was daran falsch ist
Es kommt folgender fehler: java.io.FileReader@3e25a5 ...sieht so aus als müsst ich da noch ne toString Methode einbauen... ach ja...ich arbeite mit eclipse
 

Billie

Erfahrenes Mitglied
Du lässt dir ja auch das Objekt FileReader auf die Konsole ausgeben und nicht etwas aus der Datei. Außerdem, warum erzeugst du einen BufferedReader wenn Du ihn nicht verwendest?

Der Dateiaufbau ist auch nicht sehr schieck, die übliche Methode ist eine CSV (Comma Seperated Value) zu erstellen. Das bedeutet jede Zeile in deiner Datei steht für einen Studenten. Du definierst einfach die Reihenfolge in deinem Programm (1. Vorname, 2. Nachname, 3. etc) und speicherst dann alles ab.

z.B.

Vorname;Nachname;Telefonnummer;Martrikelnummer;etc.

Dann liest Du die Datei zeilenweise ein und zerlegst den String (deine Zeile) in einzelne Teile wobei das Komma (od. ein anderes Zeichen) dein Trennzeichen darstellt:

Java:
	public static void main(String[] args) {
		
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(new File("datei.csv")));
			String line = null;
			while((line = br.readLine()) != null) {
				// Ganze Zeile:
				// System.out.println(line);				
				String[] parts = line.split(";");
				System.out.println("Vorname: " + parts[0]);
				System.out.println("Nachname: " + parts[1]);
				// ...
			}
		} catch(FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		} finally {
			if(br != null) {
				try {
					br.close();
				} catch(IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
 
Zuletzt bearbeitet von einem Moderator:

Shiso

Grünschnabel
Und vergiss nicht über die class die Java.io zu importieren.

Also: import.java.io.*;

:)
 

Homiee

Grünschnabel
Hmmm sorry ich hab da was vergessen...und zwar sollen die Sudenten nicht in einem Array sondern in einer verketteten Liste gespeichert werden.

"String[] parts = line.split(";");"

Aber wenigstens hab ich das jetzt mit dem BufferedReader und FileReader verstanden. Kannst du mir da noch ein paar Tips geben wie ich das realisieren kann
 

Homiee

Grünschnabel
Habs jetzt so gemacht:

br=newBufferedReader(newFileReader(newFile("C:\\Users\\doc\\Studenten.txt")));
String line = null;
while((line = br.readLine()) != null) {

Node n=new Node();
n.value=line;
System.out.println(line);

und es funkt...Also in meiner Textdatei steht : hans;Müller; und das bringt er mir auch so raus...muss erstma noch schauen wie ich so nen code besser hier reinpost :) sorry:p
foren hab ich bis jetzt nie besucht
 
Zuletzt bearbeitet:

Shiso

Grünschnabel
Wir hatten so eine ähnliche Aufgabe...
Muss es denn eine einfach verkettete Liste sein oder kann es eine Array Liste sein?
Aus dieser fand ich es einfacher Objekte zu erzeugen.
Für diese brauchst du jedoch noch die java.util.
und alles was du zu der array Liste brauchst dürftest du in der Java api finden.
 

Homiee

Grünschnabel
Naja laut Aufgabenstellung gehts leider nicht im Array...mir ist da aber grad was aufgefallen. Wenn ich das so mache wie bisher:

public static void main(String[] args) {
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File("C:\\Users\\doc\\Studenten.txt")));
String line = null;
while((line = br.readLine()) != null) {

Node n=new Node(line);
n.value=line;
System.out.println(line);
Die Klasse Node sieht bis jetzt bei mir so aus:

public class Node {

public Object value;
public Node next;
Node(Object v){
value=v;
next=null;
}
}

hab ich trotzdem einen denkfehler gemacht...wenn in meiner Textdatei steht: hans; Müller;07644-34567,262527
und in der zweiten Zeile auch nochma ein Student mit Name, Telefon, Matrikelnummer dann bringt er mir den kompletten Text.

Muss ich es nicht so hinbekommen das die erste Zeile ein Studentenobjekt ist mit dem ich dann weiterarbeiten kann
 
Zuletzt bearbeitet:

Billie

Erfahrenes Mitglied
Inwiefern "den kompletten Text"? Aber wenn Du meinst, dass die gesamte Datei auf der Konsole ausgegeben wird, hast Du recht:

Java:
while((line = br.readLine()) != null) {

Node n=new Node(line);
n.value=line;
System.out.println(line);
}

Außerdem ist die Zeile:

Java:
n.value=line;

überflüssig, da du dem Konstruktor von Node schon den value übergibst:

Java:
Node(Object v) {
value = v;
next=null;
}

Außerdem solltest Du die Attribute als private deklarieren, damit der obere Weg nicht mehr möglich ist - Teil der Objekt-Orientierten-Programmierung (OOP).
 
Zuletzt bearbeitet von einem Moderator:

MiMi

Erfahrenes Mitglied
muss erstma noch schauen wie ich so nen code besser hier reinpost :) sorry:p
foren hab ich bis jetzt nie besucht

Ganz einfach vor deinem code ein [.JAVA] und nach deinem code ein [./JAVA] OHNE die Punkte. Du kannst auch den Code einfuegen und markieren. Dann in der unteren Buttonleiste den 3. von rechts druecken (Raute symbol), dann erkennt er aber keine JAVA syntax.
 

Homiee

Grünschnabel
Inwiefern "den kompletten Text"?

In meiner Textdatei steht ja

1.Objekt "Vorname;Nachname;;Telefonnummer;Matrikelnummer;
2.Objekt" Vorname;Nachname;;Telefonnummer;Matrikelnummer;
etc..

und er bringt mir ja jetzt erstma die kompletten Studentenobjekte, so zu sagen! Ich weiss jetzt nur nicht wie ich es schaffen kann die erste Zeile quasi zu 1 Studentenobjekt zu machen, die zweite Zeile zum 2 Studentenonjekt usw., ist es jetzt ein bisschen klarer