Hallo!
ich habe folgendes Problem und benötige einen Denkanstoß...
Ich habe einen Editor erzeugt, der mittels RandomAccessFile Daten schreiben schreiben und Lesen soll.
Dies habe ich natürlich in 2 Methoden getrennt.
Das Schreiben funktioniert wie gewünscht, jedoch die LesenMethode nicht so wie ich es mir vorstelle(Nur der Exception Handler wird ausgeführt).....
Das Lesen der Daten soll über ein JLabel ausgegeben werden und hier liegt auch der Fehler.
ich habe folgendes Problem und benötige einen Denkanstoß...
Ich habe einen Editor erzeugt, der mittels RandomAccessFile Daten schreiben schreiben und Lesen soll.
Dies habe ich natürlich in 2 Methoden getrennt.
Das Schreiben funktioniert wie gewünscht, jedoch die LesenMethode nicht so wie ich es mir vorstelle(Nur der Exception Handler wird ausgeführt).....
Das Lesen der Daten soll über ein JLabel ausgegeben werden und hier liegt auch der Fehler.
Java:
package de.fernschulen.hangman;
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.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class WoerterListe extends JFrame {
private static final long serialVersionUID = -4744490797339378378L;
private JButton lesen, einschreiben;
private JTextField feld;
private int anzahlWoerter =0;
class Meinlistener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("lesen"))
datenLesen();
if(e.getActionCommand().equals("schreiben")) {
datenSchreiben();
}
}
}
public WoerterListe(String text) {
super(text);
//Prüfung ob die Datei schon existiert
File datei = new File("woerter.bin");
if(datei.exists() == false)
//Sonst erzeugen
datenSchreiben();
//Das Layout setzen
setLayout(new GridLayout(0,2));
//Das Textfeld erzeugen und hinzufügen
feld = new JTextField();
add(new JLabel("schreibe ein Wort: "));
add(feld);
/*lesenZahl = new JLabel("");
lesenWort = new JLabel("");
add(lesenWort);
add(lesenZahl);*/
//Die Schaltflächen erzeugen und hizufügen
lesen = new JButton("Einlesen");
einschreiben = new JButton("Schreiben");
add(einschreiben);
add(lesen);
//Die Schnittstelle erzeugen und
//den ActionCommand setzen für die Schaltflächen
Meinlistener listener = new Meinlistener();
einschreiben.setActionCommand("schreiben");
einschreiben.addActionListener(listener);
lesen.setActionCommand("lesen");
lesen.addActionListener(listener);
//Das Fenster packen
pack();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void datenSchreiben() {
if(feld.getText().isEmpty()) {
return;
}
try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","rw")){
anzahlWoerter++;
datei.writeInt(anzahlWoerter);
datei.seek(datei.length());
datei.writeUTF(feld.getText());
feld.setText("");
datei.close();
}
catch(IOException e) {
JOptionPane.showMessageDialog(this, "Problem beim schreiben");
}
}
private void datenLesen() {
try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","r")) {
//den Zeiger auf das 4. Byte setzen, da erst am dem 5. Byte gelesen
//werden soll, weil in den Bytes 1 - 4 die Anzahl der Wörter im Typen Int
//abgespeichert wird
datei.seek(4);
//Mit der While-Schleife wird die Ausgabe gesteuert
//solange die aktuelle Position kleiner ist als die
//länge der Datei wird der Index ausgelesen
//und das Wort ausgegeben
while(datei.getFilePointer() < datei.length()) {
add(new JLabel(datei.readInt() + ". Wort: " + feld.getText()));
add(new JLabel(datei.readUTF()));
//das Fenster neu packen
pack();
}
datei.close();
}
catch (IOException e) {
JOptionPane.showMessageDialog(this, "Problem beim einlesen");
}
}
public static void main(String[] args) {
new WoerterListe("Die Wörter Liste");
}
}