Input/Output BufferedWriter/Reader replace line

Braniac92

Mitglied
Hey Community 🙂

Ich hoffe mal, dass ich das Thema richtig eingeordnet habe.

Ich habe ein Anliegen, bei dem ich nicht weiter kommen. Habe auch schon recherchiert, allerdings konnte mir keine Strategie zur Lösung verhelfen.

Also zu meinem Problem.

Ich erzeuge mit einem BufferedWriter eine Datei. Jetzt habe ich aber das Problem, dass bei jedem Schritt die Initialisierung (die sein muss) mit reingeschrieben wird. Das erzeugt eine Fehlermeldung, die ich gerne weghaben würde.

Ich würde also gerne nach dem schreiben (oder beim schreiben) direkt prüfen, ob ein gewisser String (den ich kenne) geschrieben wird und ihn mit "" ersetzen.

Wie kann ich das umsetzen?

Hier mal eine Grobe skizierung, wie ich den Writer bediene:
Java:
try {
        fw = new FileWriter(Datei);
        bw = new BufferedWriter(fw);
                           
        bw.write( FUNKTIONSAUFRUF );
               
        bw.close();
        fw.close();
   

       } catch (IOException e1) {
            // TODO Auto-generated catch block
           e1.printStackTrace();
}


Ich habe öfter mal gelesen, dass man mit einem BufferedReader die Datei nach dem Close einlesen soll und dann replacen. Wie funktionier das denn?

Lieber wäre es mir aber ehrlich gesagt nach dem bw.write und vor dem bw.close den geschriebenen Text zu prüfen und zu replacen.. Ist das denn möglich?

Mir wären beide Lösungen recht, sofern sie funktionieren. Ich hoffe jemand kann mir bei meinem Problem weiterhelfen.
 
Also da verstehe ich Dein Problem nicht wirklich. Du schreibst ja den Inhalt in die Datei. Du kannst also vor dem Aufruf von write den String bearbeiten.

Das Ganze kannst Du dann in eine eigene Klasse packen, dann hast du halt eine Art Data Layer für den Dateizugriff.

Es wäre auch denkbar, einfach einen eigenen Writer zu schrieben, der von BufferedWriter erbt.

Die Idee, eine Datei erst zu schreiben um diese dann anzupassen halte ich für mangelhaft. Das wäre ja sozusagen "doppelte Arbeit".

Konrad
 
Es geht um eine fertige Funktion und Du hast keine Kontrolle über den Code? Hatte es so verstanden, dass es um Deinen Code geht.

Meine Idee ging halt in die Richtung, den Code selbst anzupassen.

Kannst Du das Szenario evtl. etwas mehr beschreiben?
 
Klar.

Also ich mache:

bw.write( FUNKTIONSAUFRUF );

Ich rufe hierbei eine Funktion auf, welche einen komplett zusammenhängenden String erzeugt.
Nehme ich nun die Initialisierung aus dieser Funktion raus, so funktioniert diese nichtmehr. Sprich also die Initialisierung muss sein.

Die Initialisierung beinhaltet so um die ersten 30 Chars von dem String. Daher ja die Frage, wie ich nach dem schrieben die ersten 30 Chars rausbekomme.
Wenn das vor dem bw.close(); gehen würde, wäre ich natürlich auch zufrieden. Sie sollen letztendlich nur nichtmehr in der Datei drin sein.

Angenommen ich schreibe folgendes:

String = "Initialisiere Hallo der Tag ist gut".

ich brauche aber nur "Hallo der Tag ist gut".

Mir wäre es natürlich auch lieber, wenn ich den String beim schreiben direkt rausnehmen könnte, aber da ich

eine Funktion aufrufe, weiß ich nicht, wie ich es vor dem closen rausnehmen kann.

meins wird ungefähr so aufgesführt:

public String sayHello(){
String s = new String("Initialisiere Hallo der Tag ist gut");
return s.tostring;
}

und dann

...
bw.write(sayHello());
...

Es gibt ja leider keine
replace-funktion, die beim schrieben einen String prüft.. oder?

Danke schonmal
 
Die Funktion, die Du aufrufst, gibt doch den String zurück. Also kannst Du aus dem einen Aufruf bw.write Aufruf mehrere Zeilen machen:
Code:
  String textToWrite = Funktionsaufruf();
  // Hier kannst Du den String modifizieren
  bw.write(textToWrite);

Damit sollte das doch dann erledigt sein.
 

Zurück
Oben