Java 打印编写器环绕

标签 java scala sed printwriter bufferedwriter

我正在使用 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 获取 JJ2 IN ->821065 2000 DT RBS JJ1 IN 百岁JJ2年->10521306 PRP 为 JJ1 至 VB JJ2 IN ->10521307 DT world POS JJ1 营销人员,MD 领导 JJ2 工作->10521308

这成为一个问题,因为当我读回这个文件时,我逐行读取,并且遇到没有 id 的行,如上所述。有趣的是,它总是只发生在相同的行上。还有比这更长的线,但它们不会环绕。

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

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

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

对我来说听起来像是某种内存问题。有人遇到过这种情况吗?

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

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

最佳答案

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

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

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

关于Java 打印编写器环绕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44960038/

相关文章:

java - OkHttp 取消调用回调失败

scala - 类型参数中的":"

mysql - 使用 Slick/Scala 将日期和时间存储到 MySQL 中

sed - 如何在 awk 中模拟 `uniq -d`?

regex - 如何使用 sed 命令删除一行中除前三个字符以外的所有字符?

regex - 我如何在 vim 中翻译正则表达式以与 sed 一起工作?

java - 从 jar 文件加载资源文件的问题

java - 如何使用 switchIfEmpty RxJava

java - 带有可视化图表的 JPA 数据库建模器

java - 从文件中读取存储为字符串的 map 对象