2016-03-28 8 views
0

Spark Streamingフレームワークを使用してJavaでプログラムを作成しています(私の問題の答えをまだ知っているSparkがわからなくても)。 私は基本的に、段落で区切られた文字列は、(ソケットを介して、文字列、毎秒1を受信し、txtファイルに保存したいのです。このようなので:。スパークストリーミングが動作する方法がであるmain()メソッドの外でFileWriterを初期化する方法

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

main()メソッドを大きなwhileループに変換するので、私が同じファイルで受け取った文字列を保存するためには、main()以外の変数を宣言する必要があります(そうしないと、

問題は、IOEXCEPTIONのために、私はこれを行う必要があります:

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

main()でwriter()を呼び出すと、以前と同じ問題が発生します(私はaを初期化します)。

main()の外側で初期化するにはどうすればよいですか?この問題はありませんか?

ありがとうございました。

+0

でそれを呼び出すことができますなぜあなたはそれを毎回ながら、(メイン)ループの終わりでファイルにその内容をフラッシュし、ファイルに追加していカント?しかし私はプライベートは、単に何か違うことを考えようとする方法だと思う。 – jgr208

+0

静的ブロックで 'writer()'を呼び出せませんか? 'static {writer();}のように。 } '?そうすればクラスを含めて一度だけ実行されます。 – Shark

答えて

1

フィールドとして宣言できますが、コンストラクタで例外をキャッチする必要があります。あなたはこの

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

使用したPrintWriterが

  • それが各行の末尾に適切な改行を置く利点を持って行うことができます。
  • これは自動フラッシュすることができます。

あなたは

writer.println(text); 
+0

ピーターありがとう。文字列を追加しようとするとNullPointerExceptionが発生しますが、これは別の問題だと思います。 –

+0

@manuelmouratoこのコードが呼び出される前に追加しようとすると起こります。あなたは 'println(null)'を実行することができます –

+1

うーん、もしそれが私のために働いていない場合です。 「ファイル名」と言うと、既存のCSVファイルへのパスが正しいことを意味しますか?私はwriter(filepath、true)を行うことはできません。それはそれを受け入れません。 –

関連する問題