Java In eine Datei in bestimmte Zeile schreiben

Sollte es in Java nicht die Möglichkeit geben aus einer Datei nur einzelne Zeilen zu ersetzen? Dann ist es nicht nötig die gesamte Datei zu kopieren sondern eben nur eine Zeile.
So im Sinne von:
Code:
1. i'te Zeile in String lesen und aus Datei löschen
2. String bearbeiten (OK wo auch immer anfügen)
3. String als zeile neu an die selbe Stelle reinschreiben

Dann bleibt der großteil der Datei unverändert


Ich hab mal gegoogelt. Der BufferedWriter und BufferedReader stellt so Methoden wie readLine() und newLine() zur Verfügung.
 
Hmmm... ich kann mir gerade irgendwie schwer vorstellen, dass es nicht möglich sein sollte, per JAVA etwas an beliebiger Stelle in einer Datei einzufügen, sondern nur zu ersetzen... Ich war doch bisher immer so begeistert von dieser Sprache! :)
Ich habe mir ansonsten einen "Platzhalter" überlegt. Sprich: so etwas wie z.B. "NK;" an erster Stelle und das würde dann durch ein "OK;" ersetzt werden. Ist allerdings die Behindertenlösung, weil sich dann der 08/15 User am Rechner fragt:"Was bedeutet denn "NK"? Das lösche ich mal/frage ich mal nach/ich habe Angst/ich erkläre der USA den Krieg!".
Ich danke euch schon einmal für all die konstruktiven Vorschläge und Anregungen hier!
 
Riker schrieb:
Hmmm... ich kann mir gerade irgendwie schwer vorstellen, dass es nicht möglich sein sollte, per JAVA etwas an beliebiger Stelle in einer Datei einzufügen, sondern nur zu ersetzen...

Sieht aber so aus. Das ist aber auch verständlich, wenn man überlegt wie Dateien vom Dateisystem gespeichert werden. Bisher habe ich APPEND auch nur am Ende von Dateien gesehen, wahrscheinlich weil sonst alles umkopiert werden müsste.

Wenn Performance relevant ist und Änderungen häufig auftreten, dann solltet ihr vielleicht überlegen die Daten in einer Datenbank abzulegen, anstatt in Dateien.
 
Es ist so, wie DjNDB sagt: Auf der Festplatte ist das ja auch ein zusammenhängender Datenblock. Wenn man mitten in einer Datei was einfügen will, muss man zwingendermaßen alles, was dahinter kommt, weiter nach hinten schieben. Und auch das ist in der Praxis kaum machbar.

Deswegen habe ich sowas noch nie anders gelöst gesehen, als dass man letztendlich eine neue Datei erstellt. Zwei Möglichkeiten wurden schon genannt: Du könntest die Datei komplett einlesen, im Speicher manipulieren und neu rauschreiben. Wenn du nicht weißt, wie groß die Datei ist, reservierst du einen Puffer im Speicher und liest immer nur einen Teil einer Datei ein und schreibst den Teil wieder raus, bevor du den nächsten Teil der Datei einliest.

Nachtrag: Das Ganze hat nichts mit der Programmiersprache zu tun, ist also kein Nachteil von Java.
 
Zuletzt bearbeitet:
Wie DerEineDa schon gesagt hat, einfügen ist auch bei anderen Sprachen immer schwierig.
Es gibt zwar schon Sprachen die Methoden haben die das scheinbar machen aber das heißt nicht das die dann auch schnell sind. Denn soweit ich weiss lesen die meisten Hochsprachen die Datei zumindest ab der Einfügestelle block- oder zeilenweise ein und schreiben dann aus dem Anfang, den Einfügedaten und dem Rest die Datei neu.
Passiert dann halt oft im Hintergrund...aber insert-Methoden benötigen oft vergleichsweise viele Taktzyklen...
 
Ich habe mich im Endeffekt nun für die Methode des Platzhalters entschieden.
Also wird es wie folgt gemacht...
In der Datei steht:
NK;1;a;2;b;3;c;4;d;
NK;5;e;6;f;7;g;8;h;
....

Aus diesem wird:
OK;1;a;2;b;3;c;4;d;
OK;5;e;6;f;7;g;8;h;
....

So kann ich die Datei Zeilenweise durchforsten und mit einer if-Abfrage auf den ersten String (NK/OK) entscheiden, ob diese Zeile bearbeitet werden soll oder auch nicht.

Damit komme ich nun auch ans Ziel - aber ich bin eben ein Dickkopf und hatte mir etwas anderes in den Kopf gesetzt... :)

Danke nochmals!
 
Riker schrieb:
Ich habe mir ansonsten einen "Platzhalter" überlegt. Sprich: so etwas wie z.B. "NK;" an erster Stelle und das würde dann durch ein "OK;" ersetzt werden. Ist allerdings die Behindertenlösung, weil sich dann der 08/15 User am Rechner fragt:"Was bedeutet denn "NK"? Das lösche ich mal/frage ich mal nach/ich habe Angst/ich erkläre der USA den Krieg!".
Ich danke euch schon einmal für all die konstruktiven Vorschläge und Anregungen hier!

Dann ersetz NK durch NA für not available :D

Um dazu etwas sinnvolleres zu sagen muss man wissen was das für Daten sind, weshalb sie in einer Datei und nicht in einer Datenbank gespeichert werden, wie die Daten in die Datei kommen und wer oder was die Daten lesen können muss.

Das selbe Problem mit dem komplett neu speichern der Datei tritt ja ggf. ebenso auf wenn die Datei im Texteditor bearbeitet und ein Wert geändert wird.

Es ist selten möglich die beste Lösung zu finden ohne alle Anforderungen zu kennen.
 
Hey DjNDB!

Ich weiß schon, dass ich euch vor nicht allzu leichten Anforderungen gestellt habe :)
Leider sind die Mittel der Informationen auch ab und an mal ein wenig begrenzt.
Diesesmal wohlan leider weil ich nicht mehr Infos rausgeben kann... :(

Aber ich danke euch dennoch!
 
Zurück
Oben