Zeile ersetzen

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hi, ich möchte ein Programm schreiben, das eine bestimmte Zeile in z. B. einem Textdokument ersetzt wird. Ich hatte es schon fast geschafft, doch bei mir werden nur die ersten Zeichen überschrieben, der Rest bleibt gleich. Ich möchte aber, dass eine Komplette Zeile ersetzt wird. Außerdem soll es einen falschen Wert abfangen, also wenn die Zeile nicht existiert, soll er nach der letzten Zeile den Text reinschreiben.

Mein erster gescheiterter Anlauf:
Code:
        public RandomAccessFile output = null;
	
	public int setfile(String filename){
	    try{
	      output = new RandomAccessFile( filename, "rw" );
	    }
	    catch ( IOException e ) {}
            return 0;}

	public String getline(int value){
		int l = 1;
		String temp ="";
		try {
		   	output.seek(0);			
			while (l  < value){				
				int k = output.read();
			   	if (k > 0){
			   		output.readLine();
			   		l++;
			   	}
			   	else {
			   		System.out.println("Zeile existiert nicht");
			   		break;
			   	}
			}
			temp =output.readLine();
			output.seek(0);
			}
			catch (IOException e){}
			return temp;
		}		

	public void changeline ( String schreiben, int value){
		int i = 1;
		try{
			output.seek(0);
			while(i < value) {
				output.readLine();
				i++;
			}
	    }
	    catch ( IOException e ){}		
		


		try {
			output.writeBytes(schreiben);
		    output.seek(0);
		}
		catch (IOException e){}
	}

Ich habe dann eine andere Klasse, die die Methoden nacheinander aufruft.
Danke im Voraus für Vorschläge.
 

WieselAc

Top Contributor
Also,..

Erstens wäre diese zweite Klasse wichtig
Zweitens wäre es interessant zu wissen wie der Dateieninhalt vorher aussieht.
Drittens wäre es interessant zu wissen wie der Dateieninhalt nachher aussieht.
Viertens wäre es interessant zu wissen wie der Dateieninhalt derzeit nachher aussiehst.
 

madboy

Top Contributor
Code:
        String filename = "bla.txt";
        File outputfile = new File(filename);
        File tempfile = new File(filename + ".temp");
        
        int lineNumberToReplace = 2; //diese Zeile wird ersetzt, also die zweite Zeile der Datei
        String toReplaceText = "Das hier wird nach dem Ersetzen in der Datei stehen";

        try {
            BufferedReader reader = new BufferedReader(new FileReader(outputfile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempfile));
            
            String line;
            int lineCounter = 0;
            while((line = reader.readLine()) != null) {
                lineCounter++;
                if(lineCounter != lineNumberToReplace) {
                    writer.write(line + "\r\n");
                } else {
                    writer.write(toReplaceText + "\r\n");
                }
            }
            if(lineCounter < lineNumberToReplace) { //falls weniger Zeilen als lineNumberToReplace Zeilen in der datei sind, wird hier angehängt
                writer.write(toReplaceText + "\r\n");
            }
            reader.close();
            writer.flush();
            writer.close();
            
            outputfile.delete();
            tempfile.renameTo(outputfile);
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
G

Gast

Gast
Danke für deine Hilfe. Ich kannte die Funktion des BufferdReader noch nicht. Ich dachte, dass man das über RandomAccesFile machen kann.
Die neue Methode ist gut und verständlich, doch er speichert die Datei nicht.
Hier der Veränderte Code:
Code:
	public void changeline ( String file, String schreiben, int value){
        String filename = file;
        File outputfile = new File(filename);
        File tempfile = new File(filename + ".temp");
       
        int lineNumberToReplace = value; //diese Zeile wird ersetzt
        String toReplaceText = schreiben;

        try {
            BufferedReader reader = new BufferedReader(new FileReader(outputfile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempfile));
           
            String line;
            int lineCounter = 0;
            while((line = reader.readLine()) != null) {
                lineCounter++;
                if(lineCounter != lineNumberToReplace) {
                    writer.write(line + "\r\n");
                } else {
                    writer.write(toReplaceText + "\r\n");
                }
            }
            if(lineCounter < lineNumberToReplace) { //falls weniger Zeilen als lineNumberToReplace Zeilen in der datei sind, wird hier angehängt
                writer.write(toReplaceText + "\r\n");
            }
            reader.close();
            writer.flush();
            writer.close();
           
            outputfile.delete();
            tempfile.renameTo(outputfile);
           
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

	}
Die Methode wird von der Klasse aufgerufen:
Code:
public class Testfile extends Veränderer{ // Imortiert die obige Methode

	
	public static void main(String[] args) {
		Testfile test = new Testfile();
		test.setfile("Test.txt");
		System.out.println("Getsize:  "+test.getsize());
		System.out.println("getline:  "+test.getline(5));
		test.changeline("Test.txt", "Das ist ein Test", 5);
		System.out.println("getline2:  " +test.getline(5));
		System.out.println("Ende....");
		
	}

}
 

madboy

Top Contributor
Ich kannte die Funktion des BufferdReader noch nicht. Ich dachte, dass man das über RandomAccesFile machen kann.
BufferedReader lässt sich auch durch RandomAccessFile ersetzen. Das wäre aber evtl. langsamer.

...doch er speichert die Datei nicht.
Gibts ne Fehlermeldung? Hast du vielleicht die Datei "Test.txt" noch irgendwo geöffnet (Editor oder in deinem Programm)? Es kann dann nämlich sein dass die nicht gelöscht werden kann, wenn sie noch geöffnet ist.

Was auch noch sein könnte ist dass du hier
Code:
System.out.println("getline2:  " +test.getline(5));
die falsche Zeile ausliest, also bei 0 anfängst die Zeilen zu zählen, während
Code:
public void changeline()
bei 1 anfängt.
 
G

Guest

Gast
Das Programm mit dem alten Quelltext, hat den Text eingelesen usw, doch er hat dann das, was in der Tempfile drin stand nicht in den Ursprünglichen Text überschrieben. Es kam weder eine Fehlermeldung, noch sonst irgendwas. Wenn ich dann das Tempfile im Editor geöffnet hab, war der veränderte Text drin. Als ich das gesehen habe, hab ich den Quelltext so verändert. Jetzt klappt alle. Danke nochmal für deine Hilfe.
Code:
	public void changeline ( String file, String schreiben, int value){
        String filename = file;
        File outputfile = new File(filename + ".txt");
        File tempfile = new File(filename + ".temp.txt");
       
        int lineNumberToReplace = value; //diese Zeile wird ersetzt
        String toReplaceText = schreiben;

        try {
            BufferedReader reader = new BufferedReader(new FileReader(outputfile));
            BufferedWriter writer = new BufferedWriter(new FileWriter(tempfile));
           
            String line;
            int lineCounter = 0;
            while((line = reader.readLine()) != null) {
                lineCounter++;
                if(lineCounter != lineNumberToReplace) {
                    writer.write(line + "\r\n");
                } else {
                    writer.write(toReplaceText + "\r\n");
                }
            }
            if(lineCounter < lineNumberToReplace) { //falls weniger Zeilen als lineNumberToReplace Zeilen in der datei sind, wird hier angehängt
                writer.write(toReplaceText + "\r\n");
            }
            reader.close();
            writer.flush();
            writer.close();
            
            tempfile.renameTo(outputfile);
           
             reader = new BufferedReader(new FileReader(tempfile));
             writer = new BufferedWriter(new FileWriter(outputfile));
           
             line = null;
            lineCounter = 0;
            while((line = reader.readLine()) != null) {
                lineCounter++;
                writer.write(line + "\r\n"); 
            }
            reader.close();
            writer.flush();
            writer.close();
            
            tempfile.delete();
            
        } catch (FileNotFoundException e) {
        } catch (IOException e) {
        }

	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
Kenan89 Bestimmte Zeile in txt-Datei ersetzen Java Basics - Anfänger-Themen 4
G Zeile in Textdatei ersetzen Java Basics - Anfänger-Themen 9
E Zeile in Datei ersetzen Java Basics - Anfänger-Themen 2
G Wert in Zeile an einer bestimmten Stelle ersetzen Java Basics - Anfänger-Themen 2
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
padde479 Zeile entfernen TableModel Java Basics - Anfänger-Themen 11
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
S Gesamten String in einer Zeile ausgeben Java Basics - Anfänger-Themen 2
J ObjectOutputStream writeChars, komische Zeichen nur in 1. Zeile Java Basics - Anfänger-Themen 2
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
A Jede x-te Zeile, lösche 10 Zeilen Java Basics - Anfänger-Themen 9
L Tiefe Kopie einer Zeile eines zweidimensionalen Arrays Java Basics - Anfänger-Themen 1
B Code Zeile unklar Java Basics - Anfänger-Themen 9
F Zeile in Ordner Java Basics - Anfänger-Themen 4
jaleda100 JTextArea Zeile einfügen Java Basics - Anfänger-Themen 1
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Java liest nur eine Zeile ein Java Basics - Anfänger-Themen 3
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
M Zeile in datei überschreiben Java Basics - Anfänger-Themen 5
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
W String in einer Zeile mit Alphabet füllen? Java Basics - Anfänger-Themen 8
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3
H Variablen Zeile aus einem ResultSet ausleesen Java Basics - Anfänger-Themen 7
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
C Datentypen Zeile aus mehrdimensionalem Array extrahieren uns abspeichern Java Basics - Anfänger-Themen 6
B FileInputStream entpacken und Zeile für Zeile entpacken Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D Datenbankzugriff - Leere Zeile einfügen Java Basics - Anfänger-Themen 2
G zeichen einer Zeile löschen Java Basics - Anfänger-Themen 4
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
A CSV datei eine Bestimmte Zeile ansprechen Java Basics - Anfänger-Themen 1
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
S Java CSV, er nimmt die nächste Zeile nicht Java Basics - Anfänger-Themen 2
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
G Zeile charweise lesen Java Basics - Anfänger-Themen 3
Ananaskirsche Input/Output Bestimmte Zeile aus Datei einlesen Java Basics - Anfänger-Themen 4
G Leere Zeile lesen Java Basics - Anfänger-Themen 12
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
C Input/Output Hilfe..txt Datei zeile verändern und Ausgabe ..Hilfe Java Basics - Anfänger-Themen 11
N Bestimmte Zeile aus einer Datei auslesen Java Basics - Anfänger-Themen 10
L Ansprechung der x'ten Zeile in Arrays Java Basics - Anfänger-Themen 10
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
I .txt Datei Zeile löschen. Java Basics - Anfänger-Themen 13
B Geschwindigkeitsabhängigkeit von Anz. d. Operatoren pro Zeile Java Basics - Anfänger-Themen 12
D Bestimmte Zeile aus TXT Datei ausgeben Java Basics - Anfänger-Themen 4
H Input/Output JTextArea einzelne Zeile auslesen Java Basics - Anfänger-Themen 6
Rayo Lese Zahl in Zeile x aus Spalte y ein! Java Basics - Anfänger-Themen 36
T Erste Schritte Ende von Wörtern in einer Zeile feststellen? Java Basics - Anfänger-Themen 5
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
L warum werden nicht die neuen Point Daten der Zeile 25 beim ausprinten Zeile 28 übernommen ? Java Basics - Anfänger-Themen 8
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
D Input/Output bestimmte Zeile auslesen Java Basics - Anfänger-Themen 3
G Ausgabe nach 5 Zeichen in neue Zeile schreiben??? Java Basics - Anfänger-Themen 12
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
B Erste Schritte Kosolennanwenung nur eine Zeile Java Basics - Anfänger-Themen 9
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
S Itext und eine neue Zeile einfügen Java Basics - Anfänger-Themen 2
B Aus Text Zeile einen String herauslesen Java Basics - Anfänger-Themen 11
W Eingabe und Ausgabe in eine Zeile Java Basics - Anfänger-Themen 4
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
K Erste Schritte Array mit 3 werte in eine Zeile -- Hilfe! Java Basics - Anfänger-Themen 2
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
E Zeile innerhalb Datei überschreiben Java Basics - Anfänger-Themen 2
P Kann Ziffer die am Ende einer Zeile steht (.txt) nicht in int übersetzen Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben