.txt reinschreiben

mar

Mitglied
Hallo an alle,

ich fülle eine .txt datei und will den neuen Eintrag nicht an die letzte Stelle setzen sondern
an die erste Stelle setzen?
Wer hat eine IDEE
Danke
Gruß
Java:
 public void actionPerformed(ActionEvent e) {
        try {
            if (e.getActionCommand().equals("OK")) {
                String text = this.textArea.getText();
                FileWriter fw = new FileWriter(destination, true);
                BufferedWriter ausgabe = new BufferedWriter(fw);
                ausgabe.write(text);
                ausgabe.newLine();
                ausgabe.close();
                 textArea.setText("");
            }
        } catch (IOException e1) {
         }
 

nrg

Top Contributor
also ich kenn nur den konstruktor vom filewriter der einen bollean append zulässt. dadruch hängt er es dann an (also ans ende). wenn du es am anfang schreiben willst fällt mir jetzt nichts besseres ein als:
-in liste einlesen
-liste ändern
-datei mit liste schreiben
 

mar

Mitglied
oder anders
jedesmal wenn eine Eingabe in die .txt kommt
soll am Ende ein . kommen eine zeile tiefer
das würde mir auch helfen
Gruß
 

EdelStoff

Mitglied
Java:
		 public void actionPerformed(ActionEvent e) {
		         try {
		             if (e.getActionCommand().equals("OK")) {
		            	 ArrayList<String> text = new ArrayList<String>();
		                 text.add(this.textArea.getText()+"\n"); // Text aus TextArea als erstes hinzufügen
		                 BufferedReader reader = new BufferedReader(new FileReader(destination));
		                 String zeile;
		                 while((zeile = reader.readLine()) != null) {
		                	 text.add(zeile+"\n"); // Textdatei auslesen und der Liste hinzufügen
		                 }
		                 reader.close();
		                 FileWriter fw = new FileWriter(destination);
		                 BufferedWriter ausgabe = new BufferedWriter(fw);
		                 ausgabe.write(text); // Liste in Datei schreiben
		                 ausgabe.close();
		                 textArea.setText("");
		             }
		         } catch (IOException e1) {
		          }
 

EdelStoff

Mitglied
sorry kleiner Fehler eingeschlichen.
Man muss die Liste natürlich einzeln in die Datei schreiben.

Java:
 ausgabe.write(text); // Liste in Datei schreiben

ändern in

Java:
for(String s : text) {
        ausgabe.write(s);
}
 

EdelStoff

Mitglied
Welche Fehlermeldung kommt denn?

Java:
} catch (IOException e1) {
        e1.printStackTrace();
}

Ich denke der Fehler liegt darain, dass du eine leere .txt Datei mit dem Namen, der in destination angegeben bist erstellen musst.
 

mar

Mitglied
Hallo
das habe ich ich habe jetzt etwas ind die .txt geschrieben
wenn ich etwas neues über die eingabe eingebe wir die .txt
gelöscht und es steht nix mehr drin
gruß
und danke für deine schnelle hilfe
 

Eminent

Bekanntes Mitglied
Hi mar,

ich habe gerade den Code von EdelStoff mal kurz getestet und der funktioniert eigentlich problemlos:

Java:
         ArrayList<String> text = new ArrayList<String>();
         // Hier müsstest du natürlich den Inhalt deiner TextArea auslesen
         text.add("Neue erste ZEILE\n"); // Text aus TextArea als erstes hinzufügen
         BufferedReader reader = new BufferedReader(new FileReader("D:\\test.txt"));
         String zeile;
         while ((zeile = reader.readLine()) != null) {
            text.add(zeile + "\n"); // Textdatei auslesen und der Liste hinzufügen
         }
         reader.close();
         FileWriter fw = new FileWriter("D:\\test.txt");
         BufferedWriter ausgabe = new BufferedWriter(fw);
         // Liste in Datei schreiben
         for (String s : text) {
            ausgabe.write(s);
         }
         ausgabe.close();
         // hier am Ende kannst du den Inhalt deiner TextArea dann wieder leeren

Wenn die Datei vorher noch nicht vorhanden ist wird es beim Einlesen zu seinem Fehler kommen. Die vorhandene Datei wird anschließend beim Schreiben jedoch überschrieben mit neuem Inhalt.

Gibt es denn irgendwelche Fehler oder läuft er fehlerfrei durch?
 

mar

Mitglied
Hallo
erstmal möchte ich bei allen bedanken
die mir so schnell geholfen haben
wunderbar
und ein dickes Dankeschön an EDEL DANKE DIR!!!!

es läuft bei mir nicht
hier nochmal der KODE
Java:
public void actionPerformed(ActionEvent e) {
                 try {
                     if (e.getActionCommand().equals("OK")) {
                         ArrayList<String> text = new ArrayList<String>();
                         text.add(this.textArea.getText()+"\n"); // Text aus TextArea als erstes hinzufügen
                         BufferedReader reader = new BufferedReader(new FileReader(destination));
                         String zeile;
                         while((zeile = reader.readLine()) != null) {
                             text.add(zeile+"\n"); // Textdatei auslesen und der Liste hinzufügen
                         }
                         reader.close();
                         FileWriter fw = new FileWriter("C:\\loi\\test.txt", true);
                         BufferedWriter ausgabe = new BufferedWriter(fw);
                         for (String s : text){
                         ausgabe.write(s); // in .txt schreiben
                        textArea.setText("");
                     }
                         ausgabe.close();
                     } 
                 } catch (IOException e1) {
                     e1.printStackTrace();
                 }
    }
}
 

EdelStoff

Mitglied
Probiers mal bitte so. Die Datei C:\loi\test.txt muss existieren.
Java:
public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("OK")) {
        	try {
	            ArrayList<String> text = new ArrayList<String>();
	            text.add(this.textArea.getText()+"\n"); // Text aus TextArea als erstes hinzufügen
	            BufferedReader reader = new BufferedReader(new FileReader("C:\\loi\\test.txt"));
	            String zeile;
	            while((zeile = reader.readLine()) != null) {
	                text.add(zeile+"\n"); // Textdatei auslesen und der Liste hinzufügen
	            }
	            reader.close();
	            FileWriter fw = new FileWriter("C:\\loi\\test.txt");
	            BufferedWriter ausgabe = new BufferedWriter(fw);
	            for (String s : text){
	            	ausgabe.write(s); // in .txt schreiben
	            }
	            textArea.setText("");
	            ausgabe.close();
        	} catch (IOException e1) {
                e1.printStackTrace();
            }    
        }
}
 

mar

Mitglied
Hallo
Danke es funtzt super sache !!!!!
Danke Danke
jetzt habe ich die nächste frage wie kriege ich es jetzt hin das das nach jeder Eingabe
ein Break und ein ANSII Punkt

Bsp.
Hallo ich bin ein Eintrag
. <-Da muss der Punkt hin nach jeder Eingabe


so soll das denn aussehen
 

Suinos

Bekanntes Mitglied
mar hat gesagt.:
[...] wie kriege ich es jetzt hin das das nach jeder Eingabe
ein Break und ein ANSII Punkt
(da fehlt die Hälfte des Satzes *hust*)

Entweder bei deiner Liste die Daten anpassen, also hier:
[JAVA=9]text.add(zeile+"\n");[/code]

oder beim schreiben in die Datei, also hier:
[JAVA=15]ausgabe.write(s);[/code]

Das Trennzeichen für Zeilen bekommst du so:
Java:
final String separator = System.getProperty("line.separator");

und den Punkt findest du auf deiner Tastatur :p
 

mar

Mitglied
Hallo
Danke für die Antworten
das probier ich jetzt noch was
wo soviele Profis hier sind
Wie kriege ich es hin das bei jeder neuen Eingabe das
Ausgabefeld aufploppt und nach einer bestimmten Zeit wieder zugeht
Gruß
Java:
package marquee;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.TimerTask;
import java.awt.Color;
import java.awt.Dimension;
import java.io.FileReader;
import java.io.IOException;
import java.util.Timer;
 import java.util.Timer;
import java.util.TimerTask;
 import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.TimerTask;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
 
public class Main extends JFrame {
    private static final long serialVersionUID = 1L;
 
    private JTextField tf;
   
    public Main() {
         setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
 
        

        setAlwaysOnTop(rootPaneCheckingEnabled);
        // setzt die Position des Jrames
        setLocation(450, 80);
        // nimmt min. max. close weg
        setUndecorated(true);
        // JTextArea textArea = new JTextArea();
        tf = new JTextField();
        // kannst du nicht bearbeiten
        tf.setEditable(false);
 
        //JScrollPane scrollPane = new JScrollPane(tf);
        //scrollPane.setPreferredSize(new Dimension(230, 50));

        tf.setPreferredSize(new Dimension(250,30));

        
        add(tf);
        pack();
        setVisible(true);
        tf.setCursor(null);
 
        tf.setBackground(Color.red);
        tf.setForeground(Color.green);
        tf.setCaretPosition(tf.getText().length());
        tf.setHighlighter(null);
       
        new Timer().schedule(new TextMarqueeTimer(tf), 0L, 150L);
    }
 
    public String readLine(FileReader reader) throws IOException {
        String line = null;
         //-1
        for (int readInt = 0; (readInt = reader.read()) != 13 && readInt != -1;) {
            String s = String.valueOf((char) readInt);
            if (line == null)
                line = s;
            else
                line += s;
        }
        reader.read();
        return (line);
    }
 
    public static void main(String[] args) {
        new Main();
    }
}
//  //debywefsxc0102/sitel$/Data/Berlin-Ticker/data.txt
 
class CheckFileContentTimer extends TimerTask {
    private static final File FILE = new File("C:/loi/data.txt ");
   
    private long lastMod;
    private TextMarqueeTimer textMarqueeTimer;
   
    CheckFileContentTimer(TextMarqueeTimer textMarqueeTimer) {
        super();
        this.textMarqueeTimer = textMarqueeTimer;
    }

    public void run() {
        while(true) {
            try {
                long atmLastMod = FILE.lastModified();
 
                if(atmLastMod > lastMod) {
                    FileReader fileReader = new FileReader(FILE);
                   
                    StringBuilder stringBuilder = new StringBuilder();
                    for (String incomingLine = null; !(incomingLine = readLine(fileReader)).equals(".");) {
                        stringBuilder.append(incomingLine.concat("-")); // mit bindestrich
                    }
                    fileReader.close();
                    lastMod = atmLastMod;
                    textMarqueeTimer.setNextText(stringBuilder.toString());
                }       
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public String readLine(FileReader reader) throws IOException {
        StringBuilder builder = new StringBuilder();
        for (int readInt = 0; (readInt = reader.read()) != 13 && readInt != -1;) {
            builder.append((char) readInt);
        }
        reader.read();
        return (builder.toString());
    }
}

 
class TextMarqueeTimer extends TimerTask {
   
    private String atmText = "";
    private String nextText = "";
    private JTextField textField;
   
    TextMarqueeTimer(JTextField textField) {
        new  Timer().schedule(new CheckFileContentTimer(this), 0L, 300L);
        this.textField = textField;
    }
    public void run() {
        if(atmText != null && nextText != null) {
            if(!atmText.equals(nextText)) {
                atmText = nextText;
                textField.setText(atmText);
            } else {
                if(atmText.length() > 0) {
                    String changedText = textField.getText();
                    String withoutFirstChar = changedText.substring(1, changedText.length());
 
                    char firstChar = changedText.charAt(0);
                    String newText = withoutFirstChar.concat(String.valueOf(firstChar));
                    textField.setText(newText);
                }
            }          
        }
    }
    public void setNextText(String nextText) {
        this.nextText = nextText;
    }
}
 

mar

Mitglied
Hallo
Problem gelöst
bei .equals(".")
Lösung .equals("")
wunderbar.
Danke für alles !!!!!

Habe schon die nächste Frage
wie kann ich in der Textdatei bestimmte Einträge löschen
hat jemand eine IDEE ???:L
Gruß
Danke im vorraus
 

nrg

Top Contributor
wie kann ich in der Textdatei bestimmte Einträge löschen

nach der frage bin ich mir nicht sicher, ob du das gundprinzip bis jetzt verstanden hast (hab den thread nicht komplett gelesen). Dateien sind keine Datenbanken. Wenn du mit dateien arbeitest, öffnest du ganz kurz einen stream und liest die komplette datei (bzw das, was du haben willst) aus -> liste -> stream schließen. Dann arbeitest du mit dieser liste. mit der kannst du dann machen was du willst. danach, wenn die liste so aussieht wie gewünscht, kannst du wieder kurz (eine iteration über die liste) einen os öffnen und das wieder in die datei schreiben.
 
G

Gast2

Gast
Order mit RandomAccessFile arbeiten - das wird aber vermutlich nur zu noch deutlich mehr Fragen führen ;)
 

Ähnliche Java Themen

Neue Themen


Oben