Worteditor mit Wortanzahl

Guten Tag. Ich habe eine Frage zu einer Aufgabe. Es geht um eine Wortliste für ein Spiel. Man soll Wörter in eine Datei speichern koennen und die Anzahl der Wörter auch. Dazu soll man einen eigenen Editor erstellen. Ich hab auch schon einige Themen darüber im Forum gefunden aber ich komme trotzdem nicht weiter. Ich habe jetzt schon 1000 verschiedene Sachen ausprobiert und es kommen nur Fehlermeldungen. Ich bin der Meinung der Code muesste jetzt eigentlich funktionieren. Warum gibt er die Fehlermeldung beim klicken des lesen oder schreiben Button aus? Was habe ich übersehen ?Hier mein Code :

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;

public class Text1 extends JFrame {
    
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    //für das Eingabefeld
    private JTextArea feld;
    private JTextField eingabe;
    private JLabel anzeige, anzahlAnzeige, anzeigeEingabe;
    private int woerterAnzahl;
    
    
    //für die Schaltflächen
    private JButton einlesen, beenden, schreiben;
    
    //die innere Klasse für den ActionListener
    class MeinListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            //wurde auf Lesen geklickt?
            if (e.getActionCommand().equals("lesen"))
                //dann die Datei einlesen
                dateiLesen();
            

            //wurde auf Schreiben geklickt?
            if (e.getActionCommand().equals("schreiben"))
                //dann die Datei schreiben
                dateiSchreiben();
            
            
            //wurde auf Beenden geklickt?
            if (e.getActionCommand().equals("ende"))
                System.exit(0);
        }
        }

        //der Konstruktor
        public Text1(String titel) {
        super(titel);
        
        
        //für das Panel mit den Schaltflächen
        JPanel tempPanel;
        
        JPanel tempPanel2;
        
        feld = new JTextArea();
        feld.setEditable(false);
        eingabe = new JTextField();
        //die Schaltflächen
        einlesen = new JButton("Wörter anzeigen");
        einlesen.setActionCommand("lesen");
        schreiben = new JButton("Wörter speichern");
        schreiben.setActionCommand("schreiben");
        
        beenden = new JButton("Beenden");
        beenden.setActionCommand("ende");
        anzeige = new JLabel("Anzahl der Wörter:");
        anzahlAnzeige =new JLabel("");
        anzeigeEingabe =new JLabel("Wort eingeben:");
        MeinListener listener = new MeinListener();
        einlesen.addActionListener(listener);
        
        schreiben.addActionListener(listener);
        beenden.addActionListener(listener);
                
        //ein BorderLayout anwenden
        setLayout(new BorderLayout());
        //das Eingabefeld mit Scrollbars
        add(new JScrollPane(feld), BorderLayout.CENTER);
        //ein Panel für die Schaltflächen
        tempPanel = new JPanel();
        tempPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        tempPanel.add(einlesen);
        tempPanel.add(schreiben);
        tempPanel.add(beenden);
        
        tempPanel2 = new JPanel();
        tempPanel2.setLayout(new GridLayout());
        tempPanel2.add(anzeige);
        tempPanel2.add(anzahlAnzeige);
        tempPanel2.add(anzeigeEingabe);
        tempPanel2.add(eingabe);
        add(tempPanel,BorderLayout.SOUTH);
        add(tempPanel2,BorderLayout.NORTH);
        //Größe setzen, Standard-Verhalten festlegen und anzeigen
        setMinimumSize(new Dimension(500,400));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        
        }
        
        
    
        //die Methode zum Lesen
        private void dateiLesen() {
            
        try (RandomAccessFile datei = new RandomAccessFile("daten.txt", "r")) {
            datei.seek(0);
            woerterAnzahl=datei.readInt();
            StringBuilder wort = new StringBuilder();
            for (int i=0; i<woerterAnzahl; i++);
            
            wort.append(datei.readUTF()).append("\n");
            
            feld.setText(wort.toString());
            anzahlAnzeige.setText(""+woerterAnzahl);
        
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        }

        
        //die Methode zum Schreiben
        private void dateiSchreiben() {
            
        try (RandomAccessFile datei = new RandomAccessFile("daten.txt", "rw")) {
            String wort=eingabe.getText();
            datei.seek(0);
            woerterAnzahl=datei.readInt();
            datei.seek(0);
            datei.writeInt(woerterAnzahl+1);
            datei.seek(datei.length());
            datei.writeUTF(wort);
            eingabe.setText("");
            dateiLesen();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        }
        public static void main(String[] args) {
            new Text1("Wörterlisten Editor Aufgabe.1");



        
        }
}


und hier die Fehlermeldung:

Java:
java.io.EOFException
    at java.base/java.io.RandomAccessFile.readInt(RandomAccessFile.java:842)
    at de.fernschulen.text1.Text1.dateiLesen(Text1.java:120)
    at de.fernschulen.text1.Text1$MeinListener.actionPerformed(Text1.java:42)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6626)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3389)
    at java.desktop/java.awt.Component.processEvent(Component.java:6391)
    at java.desktop/java.awt.Container.processEvent(Container.java:2266)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 

Robert Zenz

Top Contributor
Vergiss RandomAccessFile, das brauchst du dafuer gar nicht. Bei so einer Liste ist es vollkommen moeglich sich diese komplett in den Speicher zu ziehen, dort zu editieren, und dann komplett aus dem Speicher zu schreiben. Also was du machen koenntest ist dass du den gesamten Inhalt der Datei liest, diesen nach Zeilenenden abtrennst und dann die Woerter anzeigst. Etwas Pseudo-Code dazu:

Java:
// Pfad zu der Daten Datei.
Path woerterDatei = Path.of("/pfad/zu/deiner/datei.text");
// Einlesen des gesamten Inhalts der Datei.
String alleWoerterAusDatei = Files.readString(woerterDatei, StandardCharSets.UTF8);

// Abteilen der Wortliste nach gaengigen Zeilenumbruechen (Regulaerer Ausdruck).
for (String wort : alleWoerterAusDatei.split("(\n|\r)+")) {
    // Pruefen ob es eine leere Zeile ohne Wort war.
    if (!wort.isEmpty()) {
        // Wort anzeigen.
    }
}

Schreiben zurueck ist genau das gleiche nur andersherum:

Java:
StringBuilder alleWoerter = new StringBuilder();

for (String wort : woAuchImmerDeineWorteHerkommen) {
    alleWoerter.append(wort).append("\n");
}

// Pfad zu der Daten Datei.
Path woerterDatei = Path.of("/pfad/zu/deiner/datei.text");

Files.writeString(woerterDatei, alleWoerter, , StandardCharSets.UTF8);

Code:
java.io.EOFException
at java.base/java.io.RandomAccessFile.readInt(RandomAccessFile.java:842)
Die Fehlermeldung besagt im uebrigen dass deine Datei zu Ende ist. Also entweder ist sie leer, oder falshc geformt.
 

Oneixee5

Top Contributor
Zunächst kommt es zu einem Fehler beim Schreiben/Erstellen der Datei, wenn die Datei nicht existiert oder leer ist. Du versuchst sofort beim ersten Zugriff die Anzahl der Wörter auszulesen - diese existiert aber noch gar nicht.
Der gezeigte Fehler kann nur kommen, wenn die Datei schon vorhanden ist. Vermutlich passt die Anzahl der Wörter gar nicht mehr zum Inhalt.
 

Oneixee5

Top Contributor
Vergiss RandomAccessFile, das brauchst du dafuer gar nicht. Bei so einer Liste ist es vollkommen moeglich sich diese komplett in den Speicher zu ziehen, dort zu editieren, und dann komplett aus dem Speicher zu schreiben. Also was du machen koenntest ist dass du den gesamten Inhalt der Datei liest, diesen nach Zeilenenden abtrennst und dann die Woerter anzeigst. Etwas Pseudo-Code dazu:

Java:
// Pfad zu der Daten Datei.
Path woerterDatei = Path.of("/pfad/zu/deiner/datei.text");
// Einlesen des gesamten Inhalts der Datei.
String alleWoerterAusDatei = Files.readString(woerterDatei, StandardCharSets.UTF8);

// Abteilen der Wortliste nach gaengigen Zeilenumbruechen (Regulaerer Ausdruck).
for (String wort : alleWoerterAusDatei.split("(\n|\r)+")) {
    // Pruefen ob es eine leere Zeile ohne Wort war.
    if (!wort.isEmpty()) {
        // Wort anzeigen.
    }
}

Schreiben zurueck ist genau das gleiche nur andersherum:

Java:
StringBuilder alleWoerter = new StringBuilder();

for (String wort : woAuchImmerDeineWorteHerkommen) {
    alleWoerter.append(wort).append("\n");
}

// Pfad zu der Daten Datei.
Path woerterDatei = Path.of("/pfad/zu/deiner/datei.text");

Files.writeString(woerterDatei, alleWoerter, , StandardCharSets.UTF8);


Die Fehlermeldung besagt im uebrigen dass deine Datei zu Ende ist. Also entweder ist sie leer, oder falshc geformt.
Möglicherweise wird der Regex-Ansatz von einem Anfänger nicht verstanden.
 
Erstmal vielen Dank. Ich finde die Variante ohne RandomAccessFile auch viel besser, aber in der Aufgabe wird das wahrscheinlich als Lernzweck vorrausgesetzt. Anfangs hatte ich das alles mit dem FileWriter geschrieben. Da hat auch alles super geklappt, nur dann hatte ich das Problem das Die Anzahl der Wörter nicht gespeichert wurden. Jedesmal fing das Programm nach Neustart von vorn an . Ich denke für die Aufgabe gibt es viele Lösungsmöglichkeiten.Ich müsste also erstmal die Datei-existenz prüfen vor dem schreiben? Das werde ich nachher gleich versuchen.
 

Robert Zenz

Top Contributor
Ich finde die Variante ohne RandomAccessFile auch viel besser, aber in der Aufgabe wird das wahrscheinlich als Lernzweck vorrausgesetzt.
Das hatte ich mir schon gedacht. Dann dabei bleiben.

Da hat auch alles super geklappt, nur dann hatte ich das Problem das Die Anzahl der Wörter nicht gespeichert wurden.
Kontrolliere deine Datei, sie wird nicht so aussehen wie es dein programm erwartet.
 

Oneixee5

Top Contributor
Ich müsste also erstmal die Datei-existenz prüfen vor dem schreiben?
Auf jeden Fall vor dem Lesen der (oder in der) Datei.

Du musst die Anzahl der Wörter gar nicht speichern. Schreibe einfach jedes Wort in eine neue Zeile. Dann liest du die Datei wieder zeilenweise ein. Die Länge der ArrayList entspricht der Anzahl der Wörter/Zeilen. Zusätzlich kannst du noch prüfen ob die Zeilen evtl. leer sind.
Java:
Path out = Paths.get(filename);
List<String> arrayList = new ArrayList<>();
// Liste füllen
arrayList.add(...)
   
Files.write(out, arrayList);
Java:
ArrayList<String> result = new ArrayList<>();
try (Scanner s = new Scanner(new FileReader(filename))) {
    while (s.hasNext()) {
        result.add(s.nextLine());
    }
    return result;
}
 

Jw456

Top Contributor
Müsste man den Stream (RandomAccessFile) nicht erst schließen bevor man in neu lesen kann?
Denn in der schreiben Methode wird lesen aufgerufen ohne es zu schließen.
Bein lesen wird wohl noch nichts in der Datei sein.
 

Jw456

Top Contributor
Gedacht ist das doch bestimmt so. Man erstellt ein Objekt von RandomAccessFile und das benutz man im gesamten Programm .

Also in der Schreib und Lese Methode wird kein neues Objekt vom RandomAccessFile erstellt. sondern ich würde ihr die Instanz von dem Objekt mitgeben.

Ich weiss nicht wann Java es wirklich Physikalisch in die Datei schreibt.

Ich würde es schließen damit die Daten auch wirklich in der Datei auf der HD sind , beim Öffnen der Datei. Denn da machst du ja ein neues Objekt von RandomAccessFile.
 

Jw456

Top Contributor
Java:
  try (RandomAccessFile datei = new RandomAccessFile("daten.txt", "rw")) {
            String wort=eingabe.getText();
            datei.seek(0);
            woerterAnzahl=datei.readInt();
hier willst du schon etwas lesen obwohl noch garnichts in der Datei ist.,
 

Jw456

Top Contributor
Du kannst es ja auch mal im Debugger testen einzelschritt

Da solltest du so etwas sehen vorallen wann du in den Error Block kommst.
 
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Text1 extends JFrame {
    
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    //Textarea wird für die Wörter zum Anzeigen benutzt
    private JTextArea feld;
    //Eingabefeld für die Wörter
    private JTextField eingabe;
    //für die Labels
    private JLabel anzeige, anzahlAnzeige, anzeigeEingabe;
    //für die Anzahl der Wörter
    private int woerterAnzahl;
    //für die Wörter
    private String woerter;
    //für den Dateiname
    private String dateiName;
    //für die Schaltflächen
    private JButton einlesen, beenden, schreiben;
    //die innere Klasse für den ActionListener
    class MeinListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {
            //wurde auf Lesen geklickt?
            if (e.getActionCommand().equals("lesen"))
                //dann die Datei einlesen
                dateiLesen();
            

            //wurde auf Schreiben geklickt?
            if (e.getActionCommand().equals("schreiben"))
                //dann die Datei schreiben
                dateiSchreiben();
            
            
            //wurde auf Beenden geklickt?
            if (e.getActionCommand().equals("ende"))
                System.exit(0);
        }
        }

        //der Konstruktor
        public Text1(String titel) {
        super(titel);
        //den Dateinamen setzen
        dateiName = "daten.txt";
        //ist die Datei daten.txt vorhanden?
        File dateiTest = new File(dateiName);
        //wenn ja, lesen wir die Daten ein
        if (dateiTest.exists() == true)
        dateiLesen();
        
        //für das Panel mit den Schaltflächen
        JPanel tempPanel;
        //für das Panel mit den Labels für die Wörteranzahl
        JPanel tempPanel2;
        //die Felder und die Buttons werden alle gesetzt
        feld = new JTextArea();
        feld.setEditable(true);
        eingabe = new JTextField();
        //die Schaltflächen
        einlesen = new JButton("Wörter anzeigen");
        einlesen.setActionCommand("lesen");
        schreiben = new JButton("Wörter speichern");
        schreiben.setActionCommand("schreiben");
        beenden = new JButton("Beenden");
        beenden.setActionCommand("ende");
        //die Labels
        anzeige = new JLabel("Anzahl der Wörter:");
        anzahlAnzeige =new JLabel("");
        anzeigeEingabe =new JLabel("Wort eingeben:");
        MeinListener listener = new MeinListener();
        einlesen.addActionListener(listener);
        schreiben.addActionListener(listener);
        beenden.addActionListener(listener);
                
        //ein BorderLayout anwenden
        setLayout(new BorderLayout());
        //das Textarea mit Scrollpane
        add(new JScrollPane(feld), BorderLayout.CENTER);
        //ein Panel für die Schaltflächen
        tempPanel = new JPanel();
        tempPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        tempPanel.add(einlesen);
        tempPanel.add(schreiben);
        tempPanel.add(beenden);
        //ein Panel für die Labels
        tempPanel2 = new JPanel();
        tempPanel2.setLayout(new GridLayout());
        tempPanel2.add(anzeige);
        tempPanel2.add(anzahlAnzeige);
        tempPanel2.add(anzeigeEingabe);
        tempPanel2.add(eingabe);
        add(tempPanel,BorderLayout.SOUTH);
        add(tempPanel2,BorderLayout.NORTH);
        //Größe setzen, Standard-Verhalten festlegen und anzeigen
        setMinimumSize(new Dimension(500,400));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //alles Anzeigen
        setVisible(true);
        
        }
                //die Methode zum Schreiben
                private void dateiSchreiben() {
                //RandomAccessFile für flexible Abläufe
                //neue Instanz wird erstellt und dateipfad wird zugewiesen
                //über dateiName, rw steht für lesen und schreiben
                //Datei wird geöffnet
                try (RandomAccessFile datei = new RandomAccessFile(dateiName,"rw")){
                            
                        
                            
                            datei.writeInt(woerterAnzahl);
                            datei.seek(datei.length());
                            datei.writeUTF(feld.getText());
                            //Datei schließen
                            datei.close();
                            
                            
                            
                            
                        }

                        catch (IOException e) {
                        JOptionPane.showMessageDialog(this,"Beim Schreiben ist ein Problem aufgetreten");
                        }
                        //Wörter sind die Wörter die im Eingabefeld eingegeben wurden
                        woerter=eingabe.getText();
                        //Wörter weiter zählen
                        woerterAnzahl++;   
                        //das Eingabefeld wird wieder geleert
                        eingabe.setText("");
                        }
        
                    //die Methode zum Lesen
                    private void dateiLesen() {
                   
                
                    //Datei wird geöffnen
                    try (RandomAccessFile datei = new RandomAccessFile(dateiName,"r")){
                    //wir springen auf den Anfang mit datei.seek
                    datei.seek(0);
                    //erst die int (4Byte) lesen
                    woerterAnzahl= datei.readInt();
                    //die Woerter werden in einer While-Schleife geladen und wir gehen zum Ende der Datei.
                    //da wir nicht wissen wieviele Wörter gespeichert werden sollen wird da auch kein Limit gesetzt
                    while(datei.getFilePointer() < datei.length()) {
                
                    //Woerter werden am Ende der Datei eingesetzt
                    woerter=datei.readUTF();
                    }
                    //Datei wird geschlossen
                    datei.close();
                    }
                    catch (IOException e) {
                    JOptionPane.showMessageDialog(this,"Beim Lesen ist ein Problem aufgetreten");
                    }
                    //die Anzahl der Woerter werden in einem Label ausgegeben
                    anzahlAnzeige.setText(Integer.toString(+woerterAnzahl));
                    //Die Woerter werden im Textfeld ausgegeben
                    feld.setText(woerter);
                    
                    
        }
            
    
            }
 
Das gibt er mir dann aus . Ich muss irgendwo das Label nullen .Aber warum ?
Code:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "javax.swing.JLabel.setText(String)" because "this.anzahlAnzeige" is null
 

KonradN

Super-Moderator
Mitarbeiter
Du setzt anzahlAnzeige in Zeile 91 aber in Zeile 72 rufst Du bereits dateiLesen() auf, welches dann versucht auf dieses Label zuzugreifen.

Daher bei Code immer darauf achten, dass du erst sauber alles initialisierst, ehe Du mit irgendwelchen fachlichen Dingen loslegst.
 

Robert Zenz

Top Contributor
Das gibt er mir dann aus . Ich muss irgendwo das Label nullen .Aber warum ?
Code:
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "javax.swing.JLabel.setText(String)" because "this.anzahlAnzeige" is null
Wichtig dabei ist dass du dir immer die gesamte Stapelspur vom Fehler ansehen solltest um auch zu verstehen von wo der Aufruf kommt und welche Funktionen vorher durchlaufen wuerden.
 
So jetzt habe ich es hinbekommen .
File dateiTest = new File(dateiName);
//wenn ja, lesen wir die Daten ein
if (dateiTest.exists() == true)
dateiLesen();
habe ich im Konstruktor einfach ganz unten gesetzt.
Kurz bevor ich alles anzeigen lasse. Ich hab ja vorher noch garnichts erstellt.
Das konnte ja garnicht gehen. So wird immer erst die Datei gelesen bevor irgendwas gemacht wird.
Dann ist das Programm immer gleich uptodate und es wird auch nicht mehr von vorn gezählt.
Das klingt jetzt alles ziemlich logisch .
dateiSchreiben und dateiLesen habe ich nochmal verändert.
Ich habe erst die Zahlen gesetzt mit writeInt und dann die Wörter an das Ende der Datei geschrieben im UTF Format
So ähnlich war es ja auch im Heft.
Für die Wörter habe ich die String aber in der lesenmethode erstellt .String wort ="";
Dann hab ich erst die Zahlen gelesen und dann die Wörter in einer While Schleife geladen.
Dann habe ich beim lesen eingegeben wörter=wörter+datei.readUTF(); Damit werden immer die neuen Wörter hinten drann gehangen beim lesen
Dann habe ich die Zahlen und Wörter in der LesenMethode mit setText() und toString() anzeigen lassen.
Jetzt zählt mein Programm die Wörter mit und die Wörter werden angezeigt und alles in der Datei gespeichert.

Nochmal vielen Dank für eure Ratschläge. Es hat sehr viel Spaß gemacht.
 

mihe7

Top Contributor
Kleiner Hinweis:
if (dateiTest.exists() == true)
Das ist doppelt gemoppelt: hier wird ein boolescher Wert (dateiTest.exists()) mit einem booleschen Wert (true) verglichen, um einen booleschen Wert (true oder false) zu erhalten, der vom if-Statement geprüft wird.

Besser ist es, einfach
Java:
if (dateiTest.exists())
zu schreiben. Das liest sich gleich viel natürlicher.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Wortanzahl in erste Zeile schreiben Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben