Zeilenumbruch- .txt-Ausgabedatei

damianek2

Mitglied
Hallo,

ich bin komplett neu hier und auch ein Anfänger was das programmieren in Java angeht. Ich bin auf einem TG und in der Schule machen wir gerade die 3-Schichten-Architektur/Vererbung etc. (Nur so mal als Hintergrund)

Ich habe versucht ein Mini-login Fenster zu schreiben - bzw. Registrierung. Man kann auf einen Button klicken "Account erstellen", wann erscheint ein Fenster indem man den Namen und das Passwort eingeben kann. Das soll wiederrum in einer einfachen .txt Datei eingespeichert werden und zwar UNTEREINANDER.
Wenn man ein weiteres mal auf Account erstellen geht, soll die vorhandene Datei überschrieben werden und der neue User unter dem ersten eingetragen werden.

Nun mein eigentliches Problem: Datei wird mit dem ersten Account erstellt - alles cool. Wenn man ein 2tes Account erstellt wird auch dieser zu der Datei hinzugefügt, allerdings hinter dem Vorhandenem, d.h in einer Zeile. Weitere Accounts ebenso. Ich habe versucht mit einfachem "\n" - ging nicht, genauso wie bw.newline funktionierte ebenso nicht. Ich habe auch mit dem PrintWriter versucht "println.()" einzufügen - ist mir leider auch nicht gelungen..und ja sehr wahrscheinlich habe ich was falsch geschrieben...an der falschen Stelle, sonst was.

Mein Quellcode (Ja ich weiss es, sieht sehr wahrscheinlich für Profis sehr schäußlich aus, aber ich fange ja erst an, nimmts mir nicht übel^^):

Java:
String name = txt3.getText();
    String passwort = txt4.getText();
    if (true) {
      try {
        File file = new File("E:/Users/Damian/Desktop/User.txt");
        
        if (!file.exists()) {
          file.createNewFile();
          FileReader fr = new FileReader(file);
          BufferedReader br = new BufferedReader(fr);
          
          String content = (name+" "+passwort+"\n"); 
          //javax.swing.JOptionPane.showMessageDialog(this,"Der Name existiert bereits!");
          
          FileWriter fw = new FileWriter(file.getAbsoluteFile());
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(content);
          bw.close();
          br.close();
          javax.swing.JOptionPane.showMessageDialog(this,"Account erfolgreich erstellt!"+"\n"+"Name: "+name+"\n"+"Passwort: "+passwort); 
        } else {
          FileReader fr = new FileReader(file);
          BufferedReader br = new BufferedReader(fr);
          
          String content2;
          String content = (name+" "+passwort); 
          //Solange zeile für zeile die Datei auslesen bis die Datei zu ende ist
          while((content2=br.readLine())!= null){
            content += content2;
          }
          
          FileWriter fw = new FileWriter(file.getAbsoluteFile());
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(content+content2);
          bw.close();
          br.close();
          javax.swing.JOptionPane.showMessageDialog(this,"Account erfolgreich erstellt!"+"\n"+"Name: "+name+"\n"+"Passwort: "+passwort); 
        }
        
      } catch (IOException e) {
        e.printStackTrace();
      }
    }

Danke schon mal für Antworten!:)

Ahh bitte beachtet die If drumherum nicht, ist erstmal nur der Ansatz, wird später benötigt, es geht mir nur erstmal darum dass das einfach nur vorerst funktioniert, sodass ich weiter arbeiten kann, später kommts in verschiedene Klassen etc.

Edit2: Wenn ich außerdem ein 2tes Account erstelle, bekomm ich am Ende in der txt Datei "null" :/
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Zeilenumbruch in einer Textdatei unter Windows

Java:
"\n\r"

oder halt, um Betriebssystem unabhängig zu agieren :

Java:
System.getProperty("line.separator");
 
Zuletzt bearbeitet:

damianek2

Mitglied
Danke für die Antwort:)

Java:
System.getProperty("line.separator");

Damit habe ich es auch versucht :/
Wo genau muss es hin?
Bzw. ist der Quellcode akzeptabel?^^
 

Chloroplast

Bekanntes Mitglied
da wp du vorher dein "\n" hattest... also
etwa so
Java:
System.out.println("erster teil"+System.getProperty("line.separator")+"zweiter teil");
 

damianek2

Mitglied
Ich kriege es nicht hin zum laufen zu bringen...

btw. kann es sein dass mit der While schleife etwas nicht stimmt?

Edit2:

Habe etwas "rumgespielt" und die "null" wegbekommen - genauso wie ein Zeilenumbruch..ja nur 1.

Java:
else {
          FileReader fr = new FileReader(file);
          BufferedReader br = new BufferedReader(fr);
          
          String content2;
          String content = (name+" "+passwort); 
          //Solange zeile für zeile die Datei auslesen bis die Datei zu ende ist
          while((content2=br.readLine())== null){
            content += content2;
          }
          
          FileWriter fw = new FileWriter(file.getAbsoluteFile());
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(content+(System.getProperty("line.separator"))+content2);
          bw.close();
          br.close();
          javax.swing.JOptionPane.showMessageDialog(this,"Account erfolgreich erstellt!"+"\n"+"Name: "+name+"\n"+"Passwort: "+passwort); 
        }

Das ist die "else" aus dem Code im ersten Post. Nun aber ist beim Erstellen vom ersten und zweitem Account alles gut:
Code:
Name2 Passwort2
Name1 Passwort1

wenn ich aber weitere Accounts erstelle werden die 2 bereits existierenden ersetzt.

Code:
Name3 Passwort3
Name2 Passwort2

Komme nicht weiter...
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Mach mal folgendes , deklarier und initialisiert mal eine Konstante für den Zeilenumbruch

Java:
final static String LINE_BREAK = System.getProperty("line.separator");"

diesen kannst du dann immer dort einsetzen wo du einen Zeilenumbruch einfügen möchtest

z.B

Java:
System.out.println("Wahnsinn ich bin  " + LINE_BREAK + "ein toller Zeilenumbruch");

[EDIT]
Poste mal den kompletten code, das hört sich an als wenn du nur deine Attribute überschreiben würdest , anstelle neuer Accounts anzulegen.
[/EDIT]
 
Zuletzt bearbeitet:

damianek2

Mitglied
Poste mal den kompletten code, das hört sich an als wenn du nur deine Attribute überschreiben würdest , anstelle neuer Accounts anzulegen.

Das wird so sein...
Ich habe das Prinzip falsch verstanden...Es war so gedacht das "content" immer das eingegebene Passwort und Name ist. "content2" sollte die volle, eingelesene .txt Datei sein zu der dann eben "content" dazu kommt.

Hier der volle Quellcode:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;


/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 28.01.2014
  * @author 
  */

public class GUI extends JFrame {
  // Anfang Attribute
  private JTextField txt1 = new JTextField();
  private JTextField txt2 = new JTextField();
  private JLabel lbl1 = new JLabel();
  private JLabel lbl2 = new JLabel();
  private JButton btn1 = new JButton();
  private JButton btn2 = new JButton();
  private JTextField txt3 = new JTextField();
  private JTextField txt4 = new JTextField();
  private JLabel lbl3 = new JLabel();
  private JLabel lbl4 = new JLabel();
  private JButton btn3 = new JButton();
  // Ende Attribute
  
  public GUI(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 300; 
    int frameHeight = 355;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    txt1.setBounds(48, 40, 209, 25);
    cp.add(txt1);
    txt2.setBounds(48, 104, 209, 25);
    cp.add(txt2);
    lbl1.setBounds(48, 8, 211, 25);
    lbl1.setText("Name:");
    lbl1.setHorizontalAlignment(SwingConstants.CENTER);
    cp.add(lbl1);
    lbl2.setBounds(48, 72, 211, 25);
    lbl2.setText("Passwort:");
    lbl2.setHorizontalAlignment(SwingConstants.CENTER);
    cp.add(lbl2);
    btn1.setBounds(48, 136, 209, 25);
    btn1.setText("Login");
    btn1.setMargin(new Insets(2, 2, 2, 2));
    btn1.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        btn1_ActionPerformed(evt);
      }
    });
    cp.add(btn1);
    btn2.setBounds(48, 168, 209, 25);
    btn2.setText("Account erstellen");
    btn2.setMargin(new Insets(2, 2, 2, 2));
    btn2.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        btn2_ActionPerformed(evt);
      }
    });
    cp.add(btn2);
    txt3.setBounds(144, 224, 113, 25);
    txt3.setVisible(false);
    txt3.setText("Name");
    txt3.setFont(new Font("Dialog", Font.ITALIC, 12));
    cp.add(txt3);
    txt4.setBounds(144, 256, 113, 25);
    txt4.setVisible(false);
    txt4.setText("Passwort");
    txt4.setFont(new Font("Dialog", Font.ITALIC, 12));
    cp.add(txt4);
    lbl3.setBounds(48, 224, 91, 25);
    lbl3.setText("Name:");
    lbl3.setHorizontalAlignment(SwingConstants.RIGHT);
    lbl3.setVisible(false);
    cp.add(lbl3);
    lbl4.setBounds(48, 256, 91, 25);
    lbl4.setText("Passwort:");
    lbl4.setHorizontalAlignment(SwingConstants.RIGHT);
    lbl4.setVisible(false);
    cp.add(lbl4);
    btn3.setBounds(56, 288, 201, 25);
    btn3.setText("Registrieren");
    btn3.setMargin(new Insets(2, 2, 2, 2));
    btn3.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        btn3_ActionPerformed(evt);
      }
    });
    btn3.setVisible(false);
    cp.add(btn3);
    
    // Ende Komponenten
    
    setVisible(true);
  } // end of public GUI
  
  // Anfang Methoden
  
  
  public void btn1_ActionPerformed(ActionEvent evt) {
    // TODO hier Quelltext einfügen
  } // end of btn1_ActionPerformed
  
  public void btn2_ActionPerformed(ActionEvent evt) {
    if (lbl3.isVisible()) {
      lbl3.setVisible(false);
      lbl4.setVisible(false);
      txt4.setVisible(false);
      txt3.setVisible(false);
      btn3.setVisible(false);
      btn2.setText("Account erstellen");
    } else {
      lbl3.setVisible(true);
      lbl4.setVisible(true);
      txt4.setVisible(true);
      txt3.setVisible(true);
      btn3.setVisible(true);
      btn2.setText("Schliessen");
    } // end of if
    // TODO hier Quelltext einfügen
  } // end of btn2_ActionPerformed
  
  
  public void btn3_ActionPerformed(ActionEvent evt) {
    String name = txt3.getText();
    String passwort = txt4.getText();
    String content = (name+" "+passwort);
    if (true) {
      try {
        File file = new File("E:/Users/Damian/Desktop/User.txt"); 
        
        if (!file.exists()) {
          file.createNewFile();
          FileReader fr = new FileReader(file);
          BufferedReader br = new BufferedReader(fr);
                    
          //javax.swing.JOptionPane.showMessageDialog(this,"Der Name existiert bereits!");
                    
          FileWriter fw = new FileWriter(file.getAbsoluteFile());
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(content);
          bw.close();
          br.close();
          javax.swing.JOptionPane.showMessageDialog(this,"Account erfolgreich erstellt!"+"\n"+"Name: "+name+"\n"+"Passwort: "+passwort); 
        } else {
          FileReader fr = new FileReader(file);
          BufferedReader br = new BufferedReader(fr);
          
                    String content2;
          //Solange zeile für zeile die Datei auslesen bis die Datei zu ende ist
          
          while((content2=br.readLine())== null){
            content = content2;
          }
          
                    
          FileWriter fw = new FileWriter(file.getAbsoluteFile());
          BufferedWriter bw = new BufferedWriter(fw);
          bw.write(content+(System.getProperty("line.separator"))+content2);
          bw.close();
          br.close();
          javax.swing.JOptionPane.showMessageDialog(this,"Account erfolgreich erstellt!"+"\n"+"Name: "+name+"\n"+"Passwort: "+passwort); 
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
    } 
    
    
    // TODO hier Quelltext einfügen
  } // end of btn3_ActionPerformed
  
  // Ende Methoden
  
  public static void main(String[] args) {
    new GUI("GUI");
  } // end of main
  
} // end of class Login

Ja wie gesagt, läuft noch alles über den Button, da es nur ein Versuch war, es zum Laufen zum Bringen.
 

kaoZ

Top Contributor
Mal abgesehen davon das man beim lesen des Codes Augenkrebs durch die Formatierung bekommt , und du alles in die Gui Klasse stopfst, inclusive der Logik ^^

deklarierst du deine Variablen nur Lokal , und nicht als Attribute der Klasse, und auch noch in der actionPerformed() des Buttons.

1. Schreibe eine Klasse für die Accounts die du erstellen willst.
2. Erstelle über den Button der deine Accounts erstellen soll, ein Objekt deiner Account Klasse
3. Schreibe die Daten die dieses Account Objekt beinhaltet in eine Datei (siehe 4.)
4. Schreibe eine Klasse FileHandler o.ä die die Schreib und Lesezugriffe für deine Accounts händelt.


Das wäre ein OO Ansatz :)

hier mal ein Kleiner Ansatz wie sowas aussehen könnte

Java:
public class Account{

  private String name;
  private String password; //  <-- das halte ich allerdings für sehr bedenklich :)

public Account(String name, String password){
  this.name = name;
  this.password = password;

}

public String getName(){
  return this.name;
}


}

Sobald der Button geklickt wurde, wird ein neues Account Objekt erstellt, aus den Textfeldern deiner GUI werden die Informationen ( name und passwort) dem Konstruktor ( oder evtlen. Settern ) übergeben, und du Schreibst die Daten dieses Account Objektes, oder das Objekt selbst, in Serialisierter Form in eine (Text) Datei ( was ich hier auch für die bessere Alternative halte ). Ist es das was du vorhast ?
 

kaoZ

Top Contributor
Je nachdem was genau du vorhast , könnte man auch eine Klasse User erstellen und eine Klasse Account, so könnte man jedem Account einen User zuweisen oder umgekehrt ;)
 

damianek2

Mitglied
Also, wie gesagt, ich habe alles in einer Klasse bzw. über den Button laufen lassen, da es eben nur ein Versuch war..ich wollte nur sehen ob meine Grundidee funktioniert;)

So, ich werde nacher oder morgen versuchen alles umzuschrieben, dann poste ich es hier^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
JavaBeginner22 TextArea, ohne Zeilenumbruch? Java Basics - Anfänger-Themen 4
JUNSKI Zeilenumbruch JLabel Java Basics - Anfänger-Themen 1
G Benutzereingaben durch Zeilenumbruch trennen und in Array individueller Größe speichern Java Basics - Anfänger-Themen 20
Dawinartor Klassen Zeilenumbruch in JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 8
S \n nicht in Zeilenumbruch umwandeln Java Basics - Anfänger-Themen 5
S Zeilenumbruch mit Scanner erkennen Java Basics - Anfänger-Themen 9
M Zeilenumbruch ab der 10. Zahl Java Basics - Anfänger-Themen 11
C Stringbuffer auf Zeilenumbruch überprüfen Java Basics - Anfänger-Themen 14
F StringBuilder: Zeilenumbruch nach x Zeichen ohne Worttrennung Java Basics - Anfänger-Themen 1
C Zeilenumbruch für langes Strings Java Basics - Anfänger-Themen 2
I Zeilenumbruch im mailto-body Java Basics - Anfänger-Themen 5
AssELAss Xml nur nach End-Tag Zeilenumbruch?? Java Basics - Anfänger-Themen 7
A Zeilenumbruch im Code Java Basics - Anfänger-Themen 5
E Zeilenumbruch!? Java Basics - Anfänger-Themen 3
A Zeilenumbruch im Jlabel Java Basics - Anfänger-Themen 11
M ArrayList || Bei Ausgabe nach jedem 10. Eintrag Zeilenumbruch Java Basics - Anfänger-Themen 7
M Zeilenumbruch in JLabel Java Basics - Anfänger-Themen 51
M Zeilenumbruch in JTextarea Java Basics - Anfänger-Themen 4
J Input/Output Datei - Zeilenumbruch einlesen Java Basics - Anfänger-Themen 10
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
N Denkanstoß Zeilenumbruch Java Basics - Anfänger-Themen 9
M Zeilenumbruch JTextPane Java Basics - Anfänger-Themen 2
C jTable in .txt - versteckter Zeilenumbruch? Java Basics - Anfänger-Themen 6
T Datentypen Zeilenumbruch im String (2-dimensionales array) Java Basics - Anfänger-Themen 4
D Zeilenumbruch für XMl File Java Basics - Anfänger-Themen 3
C Zeilenumbruch verhindern / Clrscr ? Java Basics - Anfänger-Themen 3
T System.out.printf Zeilenumbruch nach x Stellen Java Basics - Anfänger-Themen 4
A Abfrage Zeilenumbruch+.+Zeilenumbruch Java Basics - Anfänger-Themen 17
c_sidi90 jTextarea kein Zeilenumbruch erlauben Java Basics - Anfänger-Themen 4
O TxT Zeilenumbruch Java Basics - Anfänger-Themen 4
E Zeilenumbruch von String schneiden Java Basics - Anfänger-Themen 13
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
M Zeilenumbruch nach x Zeichen Java Basics - Anfänger-Themen 8
C textfield zeilenumbruch Java Basics - Anfänger-Themen 2
chik Zeilenumbruch in einem JLabel Java Basics - Anfänger-Themen 6
M "spezieller" Zeilenumbruch beim Kopieren Java Basics - Anfänger-Themen 3
S Zeilenumbruch awt.textarea Java Basics - Anfänger-Themen 16
M BufferedReader.readline() Unix/Windows Zeilenumbruch Java Basics - Anfänger-Themen 4
J Zeilenumbruch in Java Java Basics - Anfänger-Themen 2
J Zeilenumbruch in Java zwischen zwei Strings Java Basics - Anfänger-Themen 6
G Problem mit Zeichen Zeilenumbruch sieht aus wie(Eckige Null) Java Basics - Anfänger-Themen 4
V Zeilenumbruch bei der Eingabe verhindern Java Basics - Anfänger-Themen 6
W Text mit Zeilenumbruch zeichnen? Java Basics - Anfänger-Themen 5
S Weicher Zeilenumbruch? Java Basics - Anfänger-Themen 2
M Konsolenausgabe ohne Zeilenumbruch Java Basics - Anfänger-Themen 3
G Zeilenumbruch in einem String Java Basics - Anfänger-Themen 21
0 Zeilenumbruch funktioniert nicht Java Basics - Anfänger-Themen 4
N automatischer Zeilenumbruch Java Basics - Anfänger-Themen 3
N zeilenumbruch einfügen Java Basics - Anfänger-Themen 3
B Char Feld -> "Zeilenumbruch" Java Basics - Anfänger-Themen 5
M Am Ende eines Strings den Zeilenumbruch entfernen Java Basics - Anfänger-Themen 1
K Zeilenumbruch entfernen aus datei ?!?!? Java Basics - Anfänger-Themen 18
R Zeilenumbruch in einer Datei Java Basics - Anfänger-Themen 8
M sting komplett bearbeiten und nicht nach zeilenumbruch ende Java Basics - Anfänger-Themen 3
G Zeilenumbruch Java Basics - Anfänger-Themen 20
M JLabel - Zeilenumbruch Java Basics - Anfänger-Themen 2
G Automatischer Zeilenumbruch bei einer TextArea Java Basics - Anfänger-Themen 16
G Zeilenumbruch in String variable Java Basics - Anfänger-Themen 4
F Zeilenumbruch Java Basics - Anfänger-Themen 9
L Plattformunabhängiger Zeilenumbruch Java Basics - Anfänger-Themen 2
G Zeilenumbruch aus String entfernen ? Java Basics - Anfänger-Themen 13
J neuer Zeilenumbruch in Datei Java Basics - Anfänger-Themen 7
L Zeilenumbruch Java Basics - Anfänger-Themen 3
D zeilenumbruch feststellen Java Basics - Anfänger-Themen 8
D zeilenumbruch EOF Java Basics - Anfänger-Themen 2
D ausgabe verändern (statt zeilenumbruch leerzeichen) Java Basics - Anfänger-Themen 2
B In einem Label "Zeilenumbruch" Java Basics - Anfänger-Themen 4
T BufferedWriter Zeilenumbruch Java Basics - Anfänger-Themen 2
P Borland Jbuilder X - Zeilenumbruch im Source Code ? Java Basics - Anfänger-Themen 2
D FileWriter write? Zeilenumbruch ? Java Basics - Anfänger-Themen 4
T JTable, DB, Zeilenumbruch Java Basics - Anfänger-Themen 25
K Zeilenumbruch in Datei schreiben Java Basics - Anfänger-Themen 2
V Zeilenumbruch in Tooltips Java Basics - Anfänger-Themen 13
T readLine ohne anschließenden Zeilenumbruch? Java Basics - Anfänger-Themen 2
G wie 'tabs' und 'zeilenumbruch' in textfile einbauen? Java Basics - Anfänger-Themen 5
G gesteuerter Zeilenumbruch Java Basics - Anfänger-Themen 2
G jEditorPane: inhalt ohne zeilenumbruch darstellen. wie? Java Basics - Anfänger-Themen 3
D Zeilenumbruch & Überschrift Java Basics - Anfänger-Themen 12
N Zeilenumbruch im StringTokenizer?? Java Basics - Anfänger-Themen 4
B Zeilenumbruch blos wie? Java Basics - Anfänger-Themen 4
M Zeilenumbruch im Textfeld Java Basics - Anfänger-Themen 5
G automatischer Zeilenumbruch Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben