String in Datei schreiben und Ausgabe einer txt - ArrayList

wdfgea

Grünschnabel
Code:
import java.util.*;
import java.io.*;

public class Telefonliste {

  	public static String telefonliste = "Telefonliste.txt";
  	public static BufferedReader br = new BufferedReader (new InputStreamReader(System.in));

  public static void main (String[] args) throws IOException {

	BufferedWriter bw = new BufferedWriter (new FileWriter(telefonliste));
	FileReader fr = new FileReader(telefonliste);

	String eintrag;
	String antwortEintrag;
	String antwortAusgabe;
	List liste = new ArrayList();

	try {
	  do {
	    System.out.println("Bitte geben Sie einen Namen und die Telefonnummer ein. Bsp.: 'Frank 0123456'");
	    eintrag = leseEintrag();
	    zeigeEintrag(eintrag);
	    speichereEintragInArrayListe(eintrag,liste);

	    schreibeEintragInTxt(eintrag,liste,bw);
	    System.out.println("Soll eine weitere Zeile hínzugefügt werden? (j/n)");
	    antwortEintrag = leseEintrag();
	  } while (antwortEintrag.equals("j"));
	}

	catch (IOException e) {
	   System.out.println("Ein- und Ausgabe Exception aufgetreten");
	}

	System.out.println("Soll die Telefonliste auf den Bildschirm ausgegeben werden? (j/n)");
	   do {
		  antwortAusgabe = leseEintrag();
		  ladeTelefonliste(br,fr);
	   } while (antwortAusgabe.equals("j"));

	bw.close();
  }

  public static String leseEintrag() {
	while (true) {
	  try {
	    return br.readLine();
	  }
	  catch (Exception e) {
	    System.err.println("Eingabefehler");
	  }
  	}
  }

  public static String zeigeEintrag(String eintrag) {

	System.out.println(eintrag);
	return eintrag;

  }

  public static String speichereEintragInArrayListe (String eintrag, List liste) {

	liste.add(eintrag);
	return eintrag;

  }

  public void löscheEintragInArrayListe (String eintrag, List liste) {

	liste.remove(eintrag);

  }

  public static String schreibeEintragInTxt (String eintrag, List liste, BufferedWriter bw) throws IOException {

    try {
  	  bw.write(eintrag + "\n");
  	}

    catch (IOException e) {
	  System.out.println("Ein- und Ausgabe Exception ist aufgetreten. Test");
    }

	return eintrag;
  }

  public static String ladeTelefonliste (BufferedReader br, FileReader fr) throws IOException {

	String textLaden = br.readLine();

	try {
	   while (br.ready())
	     System.out.println(textLaden);
	}

    catch (IOException e) {
	   System.out.println("Ein- und Ausgabe Exception ist aufgetreten.");
	}

	return textLaden;

  }


 }

Folgendes bewirkt der Code:

1. Frage nach Name und Telefonnummer zwecks Eintragung in Telefonliste.txt und Hinzufügen dieses Eintrags in die ArrayList liste.

2. Frage nach einer weiteren Eintragung in die ArrayList und in die Telefonliste.

Folgendes bewirkt der Code nicht:

1. Bei Neustart des Programms wird die txt-Datei überschrieben und nicht um weitere Einträge ergänzt.

2. Bei abschließender Frage nach Ausgabe der Liste passiert nichts.

Folgendes soll der Code tun:

1. txt-Datei jeweils ergänzen. Auch bei Neustart des Programms.
2. Die txt-Eingaben nicht neben-, sonder untereinander auflisten.
3. txt-Datei soll am Ende nach Beenden des Eintragens die Liste vollständig auslesen und auf die Konsole ausgeben.


Das soll es erstmal gewesen sein.

Vorab schon mal vielen Dank!
 

Xandro

- Mistkerl -
Moin,

ich sehe da keine explizite Frage geschweige denn verstehe ich was Du jetzt von uns erwartest...
Eventuell könntest Du eine Frage stellen, die man eindeutig beantworten kann.

Gruß,
Xan
 

wdfgea

Grünschnabel
Unter "Folgendes bewirkt der Code nicht" stehen die Defizite und unter "Folgendes soll der Code tun" stehen meine Fragen bzw. Hilfewünsche an euch... ;)
 

zerix

Hausmeister
Moderator
Hallo,

mal ein kleiner Tipp von mir.
Du solltest mal bei Problemen in die API schauen, das hätte dir nämlich schon bei deinem ersten Problem geholfen.

Code:
(new FileWriter(telefonliste, true));

Zu 2.
Ich schätze mal du hast die Datei mit dem Windows-Editor(Notepad) geöffnet und da wurde Kästen dargestellt, oder?

zu 3.
Du liest die Datei einfach zeilenweise ein und gibst Zeile für Zeile aus.

MFG

Sascha
 

wdfgea

Grünschnabel
Hallo,

mal ein kleiner Tipp von mir.
Du solltest mal bei Problemen in die API schauen, das hätte dir nämlich schon bei deinem ersten Problem geholfen.

Code:
(new FileWriter(telefonliste, true));

Was ist daran falsch? Ist das Problem, weil keine Variable existiert?

Zu 2.
Ich schätze mal du hast die Datei mit dem Windows-Editor(Notepad) geöffnet und da wurde Kästen dargestellt, oder?

Richtig.

zu 3.
Du liest die Datei einfach zeilenweise ein und gibst Zeile für Zeile aus.

Ein kleiner Tipp, mit welcher Methode etc.?
 

wdfgea

Grünschnabel
Verstanden was die Methode macht, habe ich ja. Aber wie ist es mit der Anwendung?
Das hapert noch ein bisschen...
 

wdfgea

Grünschnabel
Code:
import java.util.*;
import java.io.*;

public class Test {

  	public static String telefonliste = "Test.txt";
  	public static BufferedReader br = new BufferedReader (new InputStreamReader(System.in));

  public static void main (String[] args) throws IOException {

	BufferedWriter bw = new BufferedWriter (new FileWriter(telefonliste));
	FileReader fr = new FileReader(telefonliste);
	BufferedReader brfr = new BufferedReader(fr);

	String eintrag;
	String antwortEintrag;
	String antwortAusgabe;
	List liste = new ArrayList();

	try {
	  do {
	    System.out.println("Bitte geben Sie einen Namen und die Telefonnummer ein. Bsp.: 'Frank 0123456'");
	    eintrag = leseEintrag();
	    zeigeEintrag(eintrag);
	    speichereEintragInArrayListe(eintrag,liste);

	    schreibeEintragInTxt(eintrag,liste,bw);
	    System.out.println("Soll eine weitere Zeile hínzugefügt werden? (j/n)");
	    antwortEintrag = leseEintrag();
	  } while (antwortEintrag.equals("j"));
	}

	catch (IOException e) {
	   System.out.println("Ein- und Ausgabe Exception aufgetreten");
	}

	System.out.println("Soll die Telefonliste auf den Bildschirm ausgegeben werden? (j/n)");
	   do {
		  antwortAusgabe = leseEintrag();
		  ladeTelefonliste(brfr);
	   } while (antwortAusgabe.equals("j"));

	bw.close();
  }

  public static String leseEintrag() {
	while (true) {
	  try {
	    return br.readLine();
	  }
	  catch (Exception e) {
	    System.err.println("Eingabefehler");
	  }
  	}
  }

  public static String zeigeEintrag(String eintrag) {

	System.out.println(eintrag);
	return eintrag;

  }

  public static String speichereEintragInArrayListe (String eintrag, List liste) {

	liste.add(eintrag);
	return eintrag;

  }

  public void entfEintragInArrayListe (String eintrag, List liste) {

	liste.remove(eintrag);

  }

  public static String schreibeEintragInTxt (String eintrag, List liste, BufferedWriter bw) throws IOException {

    try {
  	  bw.write(eintrag + "\n");
  	}

    catch (IOException e) {
	  System.out.println("Ein- und Ausgabe Exception ist aufgetreten. Test");
    }

	return eintrag;
  }

	//BufferedReader brfr = new BufferedReader (new FileReader(telefonliste));

  public static String ladeTelefonliste (BufferedReader brfr) throws IOException {

	String textLaden = "Test.txt";
	System.out.println("Folgende Namen und Nummern wurden bereits eingegeben:\n");

	while (brfr.ready())
	  System.out.println(brfr.readLine());

	return textLaden;

  }


 }

Dieser Code schreibt den eingebenen String in keine Datei namens Test.txt. Warum?
 

zerix

Hausmeister
Moderator
Zu 1.
Was ist daran falsch? Ist das Problem, weil keine Variable existiert?
Vielleicht solltest du mal schauen, was ich geschrieben hab und was du da stehen hast. Zudem solltest du dann mal in der API nachschauen, was dieser Konstruktor bedeutet.

Zu 2.
Dann hab ich ja richtig vermutet. Es wird jedes Wort in einer neue Zeile geschrieben, Notepad kann das nur nicht richtig darstellen. Wenn du das ganze beispielsweise mit Wordpad öffnest, wirst du sehen, dass alles richtig in der Datei steht.


Zu 3.
Ein kleiner Tipp, mit welcher Methode etc.?
Ich weiß ja nicht wie gut dein Englisch ist, aber du nutzt schon eine Methode die sich readLine() nennt. Das ganze heißt auf deutsch "leseZeile". Die Methode gibt null zurück, wenn man am Ende der Datei eingekommen ist. Das ganze kannst du aber auch in der API nachlesen.
Hättest du meinen Rat beachtet, hättest du deine Frage nicht stellen müssen. ;-)

MFG

Sascha