Etwas mit Zeilen zum tun geht am einfachsten mit RandomAccessFile!!
Zeilen am Anfang von einer txt Datei löschen ist ganz easy!
Irgendwo drinnen is wieder bisi schwerer!
Der Ansatz mal wie man xx Zeilen am Anfang löscht!
2 RandomAccessFile Objekte! Eines mit r aufmachen den anderen mit rw!
Mit dem 1 (der nur lesen kann, jetzt mit R dargestellt) liest mal xx bytes aus. Diese Bytes wandelst du auf String um!
Danach suchst du wieviele \n es in diesem String gibt (= Zeilenumbrüche).
Hast du deine Anzahl nicht erreicht wieder xx bytes auslesen und wieder das gleich machen.
Hast du die Anzahl erreicht oder überschritten musst du die byteLänge zurückrechnen (byte Anzahl mit einem Counter mitlaufen lassen...)
So, jetzt hast du also yyy bytes ausgerechnet, welche weggeschnitten werden müssen um xxx Zeilen zu löschen.
Jetzt rechnest du dir noch die neue Dateigröße aus, indem du sagst Datei.length() - yyy = zzz
Danach setzt du R mit skipBytes auf die ausgerechnet Byte länge (yyy)!
Das 2te RandomAccessFile Objekt (kurz RW genannt) setzt du auf 0. (beim Erzeugen isses eh auf 0).
Dann liest du mit R fff (kann irgendwie sein...) bytes ein und mit RW schreibst du diese in die Datei, bist du fertig bist.
Danach sagst du RW.setLength(zzz) dadurch wird der hintere Teil weggeschnitten!
Logisch gesehen:
Du hast die gleiche Datei!
Mit einem liest du ab yyy Bytes die Zeichen an weg!
Mit dem 2ten Objekt schreibst du diese Bytes aber gleich an den Anfang der Datei!
Durch das setLength werden die hinteren Bytes dann weggeschnitten, da die neue Datei ja kleiner ist als die ältere...
Und so leicht bastelt man sich einen Zeilen am Anfang cutter
(nur ein bisi denken und schwups wups gehts schon...)
Einen Zeilen Cutter in der Mitte ist halt nur ne Spielerei...
Man liest xxx bytes ein und zählt die Zeilenumbrüche.. Bist du genau bei der Zahl, die bytes merken! Und die bytePosition dahinter auch merken (das ist jetzt neu) Danach eben bis zur der xxx Position reinspringen, die yyy Bytes überspringen und wieder mit setLength die neue Größe setzen... (den 1. Teil hätte ich zwar schon ausprogrammiert, nur ist der zu verstrickt in der Library..)