2017-07-06 5 views
1

私はJava PrintWriterを使用してScala HashMapをファイルに書き込みます。さて、問題は、このPrintWriterの出力ファイル内の次の改行までの周りのいくつかの行をラップでJavaプリントライターがラップアラウンド

def writeToFileAsMapUsingPrintWriter(data: mutable.HashMap[String, Int], outputFilename: String, outputDirectoryPath: String): Unit = { 
val myfile = new File (outputDirectoryPath, outputFilename); 
val printWriter = new PrintWriter(myfile); 
for ((k, v) <- data) { 
    printWriter.println(s"$k->$v") 
} 
printWriter.close();} 

:これは私が使用していたコードです。 例:私は戻って、このファイルを読んだとき、私は行ずつ移動し、私は上記のように、IDなしの行に遭遇したので

CC PRP VBP JJ1 to get JJ2 IN ->821065 2000 DT RBS JJ1 IN the hundred of JJ2 year->10521306 PRP be JJ1 TO VB JJ2 IN ->10521307 DT world POS JJ1 marketer , MD lead JJ2 effort->10521308

これが問題となります。興味深いのは、常に同じ行にしか発生しないということです。それより長い行がありますが、折り返しはありません。

私はHashMapでこれらの5行だけでPrintWriterを別々に実行しようとしましたが、これらの行は同じ行、つまり折り返さずに印刷します。そのとき私はそれが私の11ギガバイトのハッシュマップをフィードするときに発生します。私もprintlnをprintで置き換えようとしましたが、違いはありませんでした。

printWriter.print(s"$k->$v\n")

私は多分sedコマンドで行くと、ファイルに次の行を修正するが、それはこれらの2を修正する、と文句を言わない他の人を修正することができます。プラスそれはちょうど一時的な修正です。

私には何らかのメモリ問題のような音がします。誰かがこれまでに遭遇したことはありますか?

一方、私は試行錯誤の方法を試してみます。次に、私はPrintWriterをBuffiredWriterに置き換え、指定されたhereなどのflush()コマンドを使用します。

私のプログラムを1回実行するのに12時間かかりますので、ターンアラウンドタイムが巨大です。したがって、もし誰かがこれに遭遇した場合に備えて尋ねる。

答えて

0

キーに実際に改行が含まれていないことを確認してください。時には見つからないこともあります。私の推測では、これが解決する可能性があります:

printWriter.println(s"${k.trim()}->$v") 

JVMまたはJavaの標準ライブラリには、メモリに関する問題やその他のバグがあることに非常に懐疑的です。

関連する問題