我正在使用Java PrintWriter将Scala HashMap写入文件。这是我正在使用的代码:
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,只需在HashMap中使用这5行,然后将这些行打印在同一行中,即不包围。它只有当我提供它我的11GB哈希映射时才会发生这种情况。我也尝试用打印件替换println,但没有什么区别。
printWriter.print(s"$k->$v\n")
我可以使用sed命令并在文件中修复这些行,但这只会修复这两行,而不会修复其他行。此外,它只是一个临时修复。
听起来像是某种记忆问题。有没有人遇到过这个?
与此同时,我将尝试更多的试错法。接下来我将使用BufferedWriter替换PrintWriter,使用给定here等的flush()命令。
只需要花费12个小时来运行我的程序,所以转换时间非常长。因此,以防万一有人之前遇到过这种情况。
答案 0 :(得分:0)
您的密钥实际上是否包含换行符有多确定?有时候很难发现。我猜这可能会解决它:
printWriter.println(s"${k.trim()}->$v")
我非常怀疑JVM或Java标准库存在任何内存问题或其他错误。