# Textdatei Zeile löschen?



## Tauber (9. Jan 2014)

Heyho,

ich muss Optionen bieten lassen um eine, mehrere oder alle bis auf die erste Zeile löschen zu können. Muss ich das ganze in eine neue Datei umkopieren und diese dann umbenennen in die Orginal-Datei, die ich vorher lösche? Oder gibt es leichtere Wege?


LG, Tauber


----------



## Gucky (9. Jan 2014)

Du kannst die gesamte Datei einlesen, die gefragte Zeile löschen und die Datei wieder schreiben.
Damit wäre auch die erste Zeile kein Problem.


----------



## Tauber (9. Jan 2014)

Es klappt nicht, wenn ich mir count ausgeben lasse, dann ist das vor dem kopieren 3 (richtig), aber nach dem kopieren 0... müsste aber 2 sein.

@Gucky: Wie lösche ich denn die gesamte Zeile, ohne das ganze per kopieren zu machen?


```
public static boolean remove(int row) throws IOException {
		File f = new File("datei.txt");
		f.createNewFile();
		
		BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
		FileReader fr = new FileReader(txtFile);
	    BufferedReader br = new BufferedReader(fr);
	    
		int count = count()+1; // count gibt die Anzahl an Zeilen beginnend bei 0, daher +1
		
		for (int i = 0; i < count; i++) {
		    String zeile = br.readLine();
			if (i != row) {
				bw.write(zeile);
			}
		}
		bw.close();
		br.close();
		delete(); // löscht die aktuelle txtFile zu 100%
		f.renameTo(txtFile);
		boolean success = false;
		if (count()+1 == count-1) success = true; // Wenn der neue count 1 kleiner ist als der alte
		return success;
	}
```


----------



## Gucky (9. Jan 2014)

Du kennst die Zeilennummer. Dann machst du es in Pseudocode so:


```
public void schneideZeileAus(int zeile, File zielDatei){
   String dateiVorZeile;
   String dateiNachZeile;
   String zeile;
   int zähler = 0;
   BufferedReader buf = new BufferedReader(zielDatei);
   zeile = buf.readLine();
   while (zeile != null && zähler < zeile){
      dateiVorZeile += zeile;
      zeile = buf.readLine();
      zähler++
   }

   zeile = buf.readLine();
   while (zeile =! null){
      dateiNachZeile += zeile;
      zeile = buf.readLine();
   }
   schreibDatei(dateiVorZeile+dateiNachZeile);
}
```

EDIT: doch nicht so pseudo


----------



## Tauber (9. Jan 2014)

Danke, aber damit kopiert er doch auch die zu löschende Zeile?

```
zeile = buf.readLine(); // hier liest du die zu löschende Zeile ein
   while (zeile =! null){
      dateiNachZeile += zeile; // hier fügst du sie hinzu
      zeile = buf.readLine();
   }
```

Also müsste man bei dem Code-Schnipsel hier oben Zeile 3 & 4 vertauschen, oder?

€: Achja und vielen Danke für deinen "PseudoCode" 
€²: kann ich einfach BufferedWriter benutzen? Er fügt doch dann meinen Text nur unten drunter ein? Oder sehe ich das falsch?


```
BufferedWriter bw = new BufferedWriter(new FileWriter(txtFile, true));
bw.write(dateiVorZeile+dateiNachZeile);
```

€³: Okay habs selbst, danke <3


----------

