Wort suchen und ersetzen in einer Datei

Hallo!
Ich möchte ein Programm schreiben, dass ein Wort in einer Datei sucht und ersetzt. Leider habe ich nicht viel Ahnung vom Lesen und Schreiben in Dateien mit Java. Kann mir bitte jemand dabei helfen?
Danke im Voraus!
 
Was genau verstehst du denn nicht / wo hapert es? Es gibt ja genug Referenzen und Beispiele zu "Reading/Writing in Java" im Netz
 
Ich habe folgenden Code geschrieben:
Java:
    File file = new File("/home/simon/test.txt");
    BufferedReader reader = new BufferedReader(new FileReader(file))
    String zeile;
    while ((zeile = reader.readLine()) != null) {
        int durchlauf = 0;
        if(durchlauf <= 124) { //die datei hat 124 Zeilen
            lines[durchlauf] = zeile;
            durchlauf++;
        }
        lines[durchlauf] = zeile;
        durchlauf++;
    }
      
    int d = 0; // steht für durchlauf
    while(d <= 124) {
        newlines[d] = lines[d].replaceAll("false", "true");
        d++;
    }
      
    file.delete();//sicherstellen ob es nichts überschreibt, anhängt oder ähnliches
    File newfile = new File("/home/simon/test.txt");
    newfile.createNewFile();
      
    d = 0;
    BufferedWriter writer = new BufferedWriter(new FileWriter(newfile));
    while(d <= 124) {
        writer.write(newlines[d]);
        writer.newLine();
        d++;
    }
    writer.close();
Eclipse gibt an der Fehler seie hier:
Java:
int d = 0;
    while(d <= 124) {
         newlines[d] = lines[d].replaceAll("false", "true");
         d++;
    }
 
@Simon Programmiert Mit dem Code gibt es eine ganze Reihe von Problemen.

Problem 1: die erste Schleife
Innerhalb der ersten while-Schleife deklarierst Du die Variable durchlauf. Die wird in jeder Iteration auf 0 gesetzt. Anschließend prüfst Du ab, ob sie kleiner oder gleich 124 ist. Das ist natürlich immer der Fall, weshalb der then-Zweig immer ausgeführt wird, d. h. eine Zeile wird in lines[0] eingelesen, anschließend wird durchlauf auf 1 erhöht. Außerhalb des ifs setzt Du nochmal lines[durchlauf] auf zeile, d. h. an der Stelle betrifft es effektiv lines[1]. Das folgende Inkrementieren von durchlauf hat keinen Effekt, denn in der nächsten Iteration wird durchlauf wieder auf 0 gesetzt.

D. h. Deine Schleife bewirkt folgendes:
Java:
    while ((zeile = reader.readLine()) != null) {
        lines[0] = zeile;
        lines[1] = zeile;
    }

Es werden also nur lines[0] und lines[1] gesetzt. Wenn ich mal davon ausgehe, dass Du lines mit String[] lines = new String[124]; definiert und keinem Element explizit etwas zugewiesen hast, sind alle anderen null. Dann bekommst Du in der zweiten Schleife in der dritten Iteration eine NullPointerException.

Problem 2: Du arbeitest mit einer festen Zeilenanzahl. Wozu?

Problem 3: s. Antwort von @Thorati

Problem 4: Du liest die Zeilen erstmal in ein Array ein. Damit verbrauchst Du unnötig Speicher.

Problem 5: kein Exception-Handling

Problem 6:
Code:
file.delete();//sicherstellen ob es nichts überschreibt, anhängt oder ähnliches
Du willst sicherstellen, dass auch ja nichts überschrieben wird. Deshalb löscht Du die Datei erstmal vorsorglich? Auch eine Möglichkeit...
 

Neue Themen


Zurück
Oben