2016-03-28 8 views
0

Ich schreibe ein Programm in Java mit dem Spark Streaming-Framework (auch wenn Sie nicht wissen, was Spark ist, können Sie immer noch die Antwort auf mein Problem kennen). Ich erhalte grundsätzlich Strings, eine pro Sekunde über eine Buchse und wollen, dass sie in einer txt-Datei (jede Zeichenfolge durch einen Absatz getrennt speichern, so etwas wie folgt aus:.Wie FileWriter außerhalb der main() Methode zu initialisieren ist

FileWriter a = new Filewriter (path to file); 
a.append(string s); 
a.append('\n'); 
a.flush; 

Die Art und Weise Spark-Streaming funktioniert, ist durch Die Methode main() wird in eine große while-Schleife umgewandelt, damit ich die Strings, die ich in der gleichen Datei erhalte, speichern muss, muss ich die a-Variable außerhalb von main() deklarieren (ansonsten wird nur initialisiert und gespeichert) . die letzte Zeichenkette, die es empfängt)

das Problem ist, wegen einer IOException, ich habe dies zu tun:

public static void writer() throws IOException 
{ 
    FileWriter a= new Filewriter (path to file); 
} 

Aber wenn ich writer() im main() aufrufen bekomme ich das gleiche Problem wie vorher (ich initialisiere weiter a).

Wie kann ich eine außerhalb der Haupt() initialisieren, so habe ich dieses Problem nicht?

Vielen Dank.

+0

warum kann nicht Sie haben es seinen Inhalt auf eine Datei am Ende der while (Haupt-) Schleife spülen und jedes Mal an die Datei anhängen? Aber ich denke, das Private ist der Weg, um nur etwas anderes zu denken. – jgr208

+0

können Sie 'writer()' nicht in einem statischen Block aufrufen? wie 'static {writer(); } '? So wird es nur einmal ausgeführt, wenn die Klasse eingeschlossen wird. – Shark

Antwort

1

Sie können es als ein Feld deklarieren, jedoch müssen Sie die Ausnahme im Konstruktor abfangen. Sie können dies tun

private final PrintWriter writer = new PrintWriter(filename, true); 

Mit Printwriter den Vorteil hat, dass

  • es am Ende jeder Zeile eine entsprechende Newline platziert.
  • kann es aktiviert werden, um automatisch zu blocken.

Sie können es nennen mit

writer.println(text); 
+0

Danke Peter. Jetzt bekomme ich eine NullPointerException, wenn ich versuche, meine Strings anzuhängen, aber ich denke, das ist ein anderes Problem –

+0

@manuelmourato, das passieren würde, wenn Sie versuchen, anzufügen, bevor dieser Code aufgerufen wurde. Sie können 'println (null)' –

+1

Hmm, wenn das der Fall ist, dass es für mich nicht funktioniert. Wenn Sie "Dateiname" sagen, meinen Sie, dass der Pfad zu meiner bestehenden CSV-Datei korrekt ist? Ich kann nicht writer (filepath, true), es akzeptiert es nicht –

Verwandte Themen