Wie kann man bei Java in eine Datei schreiben?

6 Antworten

Ist genau das Format aus der Frage vorgegeben, oder musst du einfach nur mehrere Key-Value-Paare irgendwie auf Platte schreiben? Wenn zweiteres der Fall ist, würde ich mir eine existierende JSON-Library zur Hand nehmen, die zu persistierenden Daten entsprechend in ein JSON-Objekt zu überführen und das mit der Java File-API schreiben. Andersrum genauso, die ganze JSON-Datei lesen, und mit der JSON-Library die gewünschten Werte auslesen

Woher ich das weiß:Berufserfahrung
igordastunfisch  24.07.2022, 12:17

Ansonsten halt Zeile für Zeile einlesen, schauen was vor dem Doppelpunkt steht, ob du Kommentare wie #Database berücksichtigen musst, die Einrückungen zählen, um zu wissen auf welcher Ebene der baumartigen Textstruktur du dich befindest, eine Suche in diesem Baum machen, um den gewünschten zu bearbeitenden, löschenden oder einzufügenden Key zu finden, und eine Zeile mit entprechenden Einrückungen an der richtigen Stelle einfügen. Im Prinzip baust du dann halt einen eigenen Parser für dein eigenes Textformat, kann man machen, wenn man nicht aufpasst kann besonders bei Edgecases einiges schief gehen, deswegen ist es eigentlich fast immer ratsam, auf existierende Lösungen wie JSON, YAML, XML, etc. zurückzugreifen

2
NackterGerd  24.07.2022, 12:40

Ich kenne zwar Java nicht so, aber ist das nicht mit Kanonen auf Spatzen schießen?

1
igordastunfisch  24.07.2022, 12:43
@NackterGerd

Eben, deswegen soll er ja ne JSON-Library nehmen oder sowas und dann einmal die ganze Datei lesen und schreiben, natürlich ist es in 99% der Fälle völliger Overkill nen Parser zu schreiben

1
NackterGerd  24.07.2022, 12:55
@igordastunfisch

Ich wusste nicht dass das, mit Java so kompliziert ist

Ist mit anderen Sprachen wie z.b. PHP ganz einfach, und effektiver wie lange große Libs zu laden.

Jetzt verstehe ich warum manche Programme so unnötig groß sind.

Danke für die Aufklärung

0

Hallo. Die Dateien würde ich wohl einfach neu erstellen. Also den Datensatz als Objekt oder so einlesen, und dann in der gewünschten Textrepräsentation rausschreiben. Erscheint mir in diesem Fall jedenfalls naheliegender, als allein auf Textebene zu operieren.

Hey,

das Format sieht mir sehr nach Yaml aus, such dir am besten eine Yaml Bibliothek für Java und nutze diese, um deine Datei zu schreiben. Deine Abfragen solltest du damit ebenfalls leicht umsetzen können.

Mfg Jannick (L1nd)

Woher ich das weiß:eigene Erfahrung
name123454321 
Fragesteller
 24.07.2022, 22:19

Gibt es dafür ein Package was ich mit import nutzen kann?

1
JanMarcel01  24.07.2022, 22:25
@name123454321

Ja, du brauchst dafür aber soweit ich weiß eine extra Bibliothek, welche du über dein BuildTool oder zumindest über die IDE einbinden musst.

1
name123454321 
Fragesteller
 24.07.2022, 22:27
@JanMarcel01

Ich suche dann mal dannach im Internet, ich habe nämlich die ganze Zeit versucht sowas in der Art wie Yaml selbst zu machen und das ist zimlich aufwendig

0
name123454321 
Fragesteller
 24.07.2022, 23:58
@JanMarcel01

Ich habe im Internet die SnakeYaml Bibilothek in mein Projekt reingemacht und konnte damit schonmal Informationen aus der Datanbank auslesen, aber gibt es auch eine Möglichkeit wie ich damit neue Daten eintragen kann?

0

Du musst die ganze Textdatei lesen dann die Daten Ändern und dann die Daten speichern.

Du kannst auch temporär die Datei Zeile für Zeile lesen und Zeile für Zeile in eine neue schreiben incl Änderungen

Und danach die original Datei ersetzen

Such nach "Java Datei lesen schreiben".

falls dies der Fall ist die Zeile nach unten verschieben
Wenn ich eine bestimmte Zeile löschen will

Beides geht nicht - zumindest nicht so direkt.

Generell kannst Du nicht einfach mittendrin etwas schreiben oder löschen, beides fordert immer, dass Du alles darauf Folgende komplett neu schreibst. Das gilt auch, wenn Du nur Werte in einer Zeile ändern willst, der Zeilenumbruch ist für den PC nichts relevantes (nur ein/zwei Zeichen), wenn der neue Wert länger ist, als der alte Wert, hast Du das gleiche Problem wieder.

Heißt:

Lies die ganze Datei in eine ArrayList (Zeile für Zeile), mach damit, was Du willst und überschreibe dann die ganze Datei mit der ArrayList.

Oder Du nimmst eine zweite Datei dazu. Du schreibst alles aus dem Original bis zu dem Punkt, wo sich was ändern, in die neue Datei, danach schreibst Du den neuen Inhalte (oder nichts, wenn es gelöscht wurde) und zum Schluss den ganzen Rest. Das wäre - richtig implementiert - die performanteste Variante, ist aber weit komplexer zu programmieren und deine Daten sind vermutlich zu klein, dass das relevant wäre.

Wenn Du ein bestehendes Format (JSON, XML, CSV, etc.) hast, solltest Du natürlich bestehende Implementierungen für dieses Format zurückgreifen. Deine Beispiele sehen ein bisschen nach YAML aus, dann solltest Du auch YAML nutzen. Selber Datei-Formate erfinden ist meist eine blöde Idee, also solltest Du entweder direkt YAML oder eines der anderen üblichen Formate nutzen - ich nutze am liebsten JSON für sowas.

Und wenn Du doch sehr viele Daten hast, lohnt es sich vermutlich, eine Datenbank zu nehmen, die sind auf sowas optimiert.

Woher ich das weiß:Berufserfahrung – C#.NET Senior Softwareentwickler