FileWriter methodenübergreifend deklarieren, wie?

...komplette Frage anzeigen

2 Antworten

Du kannst eine Instanz eines FileWriters in mehreren Methoden verwenden, in dem du ihn als Feld der Klasse definierst und im Konstruktor oder am Anfang der Methode erstellst.

public class Output implements Closeable {
private BufferedWriter _writer = null;
public Output() {
_writer = new BufferedWriter(new FileWriter("file.txt"));
}
public void Method1(String line) {
_writer.write(line, 0, line.length);
}
public void Method2(char sign) {
_writer.write((int) sign);
}
public void close() {
_writer.close();
}
}

Wie dir in dem Beispiel vielleich auffällt, musst du dich in diesem Fall selbst um das Schließen des File-Handles kümmern. Das wird normalerweise über das Interface Closeable oder AutoCloseable gelöst.

Du kannst es allerdings auch pro Methode machen. Ein Blick in die Doku zeigt, dass FileWriter ein Argument für das Anhängen an Dateien hat.

public static void WriteMethod(String line) {
try (BufferedWriter writer = new BufferedWriter(new FileWriter("file.txt", true))) {
writer.write(line, 0, line.length);
}
catch (IOException ex)
{
System.err.println("Error on writing file");
}
}

Hier wird der Writer bei jedem Methodenaufruf angelegt, die Zeile wird geschrieben, in dem sie an eine vorhandene Datei angehangen wird bzw. an eine neu erstellte, wenn keine Datei vorhanden war. Danach wird der Writer automatisch geschlossen und das Handle geschlossen.

Antwort bewerten Vielen Dank für Deine Bewertung

Zunächst zum "Methodenübergreifenden" deklarieren:

import java.io.FileWriter;
import java.io.IOException;

public class Test implements AutoCloseable{
//Der Methodenübergreifende FileWriter wird hier deklariert.
private FileWriter writer;
public Test() throws IOException{
//Der Methodenübergreifende FileWritere wird hier erstellt.
writer = new FileWriter("test.txt");
}
//Testmethode #1
public void writeFoo() throws IOException{
writer.write("foo",0,3);
writer.flush();
}
//Testmethode #2
public void writeBar() throws IOException{
writer.write("bar",0,3);
writer.flush();
}
@Override public void close() throws IOException{
writer.flush();
writer.close();
}
public static void main(String[] args){
try{
//Hier wird getestet.
Test test = new Test();
test.writeFoo();
test.writeBar();
System.out.println("Alles OK");
}
catch(IOException ex){
System.out.println("Fehler: " + ex.toString());
}
}
}

Am Ende solltest du eine Datei namens "test.txt" haben mit folgendem Inhalt:

foobar

Um eine Datei zu erweitern (Inhalte anzuhängen), benutze folgenden Konstruktor für den FileWriter:

public FileWriter(File file, boolean append) throws IOException

Also z.B.:

FileWriter writer = new FileWriter("test.txt", true);
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von 42424242
28.09.2016, 15:05

Wenn schon, dann so:
(Sonst wird der FileWriter nicht automatisch geschlossen)

... 
try (Test test = new Test()) {
test.writeFoo();
test.writeBar();
System.out.println("Alles OK");
}
....
0

Was möchtest Du wissen?