【问题标题】:Java print writer wraps aroundJava 打印编写器环绕
【发布时间】:2017-12-11 02:50:02
【问题描述】:

我正在使用 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 的行,如上所述。有趣的是,它总是只发生在相同的行上。有比这更长的行,但它们不会环绕。

我尝试在 HashMap 中仅使用这 5 行单独运行 PrintWriter,然后它将这些行打印在同一行中,即不回绕。只有当我向它提供我的 11GB 哈希映射时才会发生这种情况。我也尝试用 print 替换 println,但没有任何区别。

printWriter.print(s"$k-&gt;$v\n")

我也许可以使用 sed 命令进入并修复文件中的这些行,但这只会修复这 2 行,而不会修复其他行。另外,这只是一个临时修复。

对我来说,这听起来像是某种记忆问题。有没有人遇到过这种情况?

同时,我会尝试更多的试错方法。所以接下来我要用 BufferedWriter 替换 PrintWriter,使用给定 here 等的 flush() 命令。

只是我的程序运行一次需要 12 个小时,所以周转时间很长。因此,以防万一有人遇到过这种情况。

【问题讨论】:

    标签: java scala sed printwriter bufferedwriter


    【解决方案1】:

    您如何确定您的密钥实际上不包含换行符?这有时很难发现。我的猜测是这可能会解决它:

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

    我非常怀疑 JVM 或 Java 标准库是否存在任何类型的内存问题或其他错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      相关资源
      最近更新 更多