2017-07-06 69 views
1

我正在使用Java PrintWriter將Scala HashMap寫入文件。這是我使用的代碼: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();} 

現在的問題是這周圍的PrintWriter包裝一些線路輸出文件的下一個換行符。 如:

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

這將成爲,因爲當我讀到這個文件後面一個問題,我去逐行,和我遇到行沒有ID,如上面。而有趣的部分是它只發生在同一條線上。有比這更長的線條,但他們不環繞。

我試圖獨立運轉的PrintWriter只是與這些5條線在HashMap,那麼它打印在同一行即這些線不纏繞。它只有當我餵我的11GB哈希映射,這發生。我也嘗試用print替換println,但沒有什麼區別。

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

我也許可以進去與SED命令修復文件中這些行,但只能解決這些2,不會修復等。另外它只是一個臨時修復。

聽起來像某種內存問題給我。有沒有人遇到過這個?

同時,我會嘗試更多的試錯法。所以接下來我將用BufferedWriter替換PrintWriter,使用flush()命令,如here

只需要花費12小時來運行我的程序一次,所以轉身時間是巨大的。因此,以防萬一有人遇到過這種情況。

回答

0

你有多確定你的密鑰實際上不包含換行符?有時候很難發現。我的猜測是,這可能解決這個問題:

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

我很懷疑有任何種類的內存問題或其他錯誤與JVM或Java標準庫。