# Textdateien bearbeiten



## Guest (5. Apr 2005)

Ich möchte in meinem Java-Programm eine Textdatei öffnen, nach einer bestimmten zeichenkette suchen und anschließend die komplette Zeile wo diese Zeichenkette gefunden wurde, löschen. Allerdings kenne ich mich mit der bearbeitung von textdateien überhaupt nicht aus. kann mir da jemand helfen?


----------



## The_S (5. Apr 2005)

Du öffnest die Textdatei (z. B. mit dem BufferedReader), speicherst sie in nem String und ersetzt die Zeichenkette mit replaceAll()

[edit] ach die Komplette Zeile, dann les mit dem BufferedReader mit readLine() ein und überprüf gleich, ob diese Zeichenkette vorhanden ist.


----------



## Guest (5. Apr 2005)

sicher dass das auf die art und weise performant ist? die datei hat fast 3000 zeilen. die würde ich ungern komplett in einen string einlesen


----------



## The_S (5. Apr 2005)

Hast du schon mein Edit gesehen?


----------



## Guest (5. Apr 2005)

jetzt schon ;-)

kannst du mir mal ein kurzes beispiel für den buffered reader geben?


----------



## mic_checker (5. Apr 2005)

Guck mal hier - da findest du echt viel


----------



## The_S (5. Apr 2005)

```
String str = "";
StringBuffer strB = new StringBuffer();
BufferedReader buff = new BufferedReader(new FileReader("textdatei.txt"));
while ((str = buff.readLine()) != null) {
    if (str.indexOf("böser Text") == -1) {
        strB.append(str);
    }
}
```

[edit]


			
				mic_checker hat gesagt.:
			
		

> Guck mal hier - da findest du echt viel



LOL :lol: . Wo er recht hat ...


----------



## Guest (5. Apr 2005)

kann man auch irgendwie absolute Pfade auswählen?


```
BufferedReader buff = new BufferedReader(new FileReader("textdatei.txt"));
```

Das Ganze ist eine JSP-Anwendung und der Benutzer kann mittels "Durchsuchen"-Button eine bestimmte Datei suchen. Der Pfad wird dabei allerdings absolut in einem String gespeichert.


----------



## The_S (5. Apr 2005)

```
BufferedReader buff = new BufferedReader(new FileReader(stringMitDemAbsolutenPfad));
```


----------



## Guest (5. Apr 2005)

so schlau war ich ja auch. aber irgendwie zerhaut er mir dabei den String.


```
type Status report

message d: est.txt (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)

description The requested resource (d: est.txt (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)) is not available.
```

Das Ganze ist in D:\Test.txt gespeichert und steht auch genau so in meinem String


----------



## The_S (5. Apr 2005)

Wie wärs mit D:\\Test.txt ?

Weil \t ein Tabulator ist und \\ ein Leerzeichen!!!

[edit] Was schreib ich für Scheiße? \\ ist natürlich ein Backslash  ???:L


----------



## Guest (5. Apr 2005)

hast recht 

und wie lösche ich jetzt im endeffekt die zeile? bis dahin lässt es sich fehlerfrei ausführen


----------



## The_S (5. Apr 2005)

Schau dir nochmal meinen Code an! Da wird bereits überprüft ob in der gelesenen Zeile der "böse Text" vorkommt. Wenn dies der Fall ist, wird die Zeile erst gar nicht hinzugefügt. Wenn du es Zeilengenau haben willst, musst du natürlich noch ein + "\n" bei strB.append() einfügen.

[edit] Hehe, schon wieder schneller :bae:


----------



## mic_checker (5. Apr 2005)

Guck dir doch seinen Code oben an, wenn der Text in der Zeile vorkommt (return wert von indexOf dann != -1), hängt er nicht an den Buffer an...

edit:
arg, ich sollt mich doch nicht so viel von den ganzen bildchen im netz ablenken lassen und lieber mal schneller antworten


----------



## Guest (5. Apr 2005)

der Code scheint aber nicht ganz richtig zu sein. Ich dachte, man müsste Strings immer mit .equals vergleichen. So gibt er mir eine Fehlermeldung


----------



## The_S (5. Apr 2005)

Was gibt er für eine Fehlermeldung? Und wo bitte vergleiche ich zwei Strings?


----------



## mic_checker (5. Apr 2005)

Du vergleichst keine zwei Strings, du überprüfst ob der eine String im andern vorkommt, falls ja ist der Rückgabewert != -1.

Hobbit: Ergänzend zu deinem Post, hab mir jetzt extra mehr zeit gelassen


----------



## The_S (5. Apr 2005)

mic_checker hat gesagt.:
			
		

> falls ja ist der Rückgabewert != -1.



komplizierter kann mans ja nicht schreiben :wink:


----------



## Guest (5. Apr 2005)

eine fehlermeldung bekomme ich jetzt nicht mehr, aber die textdatei bleibt unverändert. muss ich den neuen String dann nicht noch in der Textdatei abspeichern?


----------



## The_S (5. Apr 2005)

Ja natürlich!   , gell das hast du nicht gemacht?


```
BufferedWriter buff2 = new BufferedWriter(new FileWriter(verzeichnisZumSpeichern));
buff2.write(bearbeiteterString);
buff2.close()
```


----------



## Guest (5. Apr 2005)

Ich hab das Ganze jetzt so bei mir ausgeführt:


```
String str = "";
    StringBuffer strB = new StringBuffer();
    
    BufferedReader buff = new BufferedReader(new FileReader("d:\\test.txt"));
    while ((str = buff.readLine()) != null) {
        if (str.indexOf("hilfe") == -1) {
            strB.append(str + "\n");
        }
    }
    
    BufferedWriter buff2 = new BufferedWriter(new FileWriter("d:\\test2.txt"));
    buff2.write(strB.toString());
    buff2.close();
```

Er macht keinen Zeilenumbruch, sondern schreib das Ganze als Sonderzeichen in die Datei.
[/list]


----------



## The_S (5. Apr 2005)

Dann mach noch


```
deinAbgeänderterText.replaceAll("\n", System.getProperty("line.separator"));
```

Dann wird der systemspezifische Zeilenumbruch verwendet. _*Es gibt hier übrigens auch eine Suche!!!*_


----------



## Guest (5. Apr 2005)

jetzt funzt alles wunderbar. Danke für deine hilfe und für deine Geduld


----------

