【问题标题】:Unexpected line break using PrintWriter使用 PrintWriter 意外换行
【发布时间】:2020-01-03 04:02:46
【问题描述】:

我不知道为什么 PrintWriter 在看到这个符号 '##' 时会断行

我想将这些行写入 .txt 文件

但是得到了这个,你可以看到它有一些意想不到的行:

我的部分代码:

try(OutputStreamWriter fw = new OutputStreamWriter(
                                            new FileOutputStream(filePath + "\\" +file_number + "_"+ info.getFileName(), true),
                                            StandardCharsets.UTF_8);
                                            BufferedWriter bw = new BufferedWriter(fw);
                                            PrintWriter out = new PrintWriter(bw, false)) {
       JCoTable rows = function6.getTableParameterList().getTable("DATA");
       for (int i = 0; i < rows.getNumRows(); i++) {
          rows.setRow(i);
          out.write(Integer.toString(CURRENT_ROW) + ((char)Integer.parseInt(info.getFileDelimited()))+ rows.getString("WA") + "\n");}

【问题讨论】:

  • 当然不是。它在输入数据中。

标签: java filewriter jco


【解决方案1】:

ABAP 表包含 6 行,您的输出包含 6 行。所以我猜你的意思是“额外的行”,第 2 行的额外换行符。 2 和 6。

我认为这是因为这些换行符是这些行中文本的一部分。 SAP GUI 不会编写这些控制字符并将它们输出为“##”,但 Java 代码当然会打印这些字符。我猜这 2 个替换字符 '##' 实际上是控制字符 END OF LINE (U+000A) 和 CARRIAGE RETURN (U+000D)。 您可以使用 ABAP 调试器的十六进制视图或在您的 Java 开发环境调试器中检查它们的真实字符代码。

【讨论】:

  • 我认为问题在于 Java 将“##”视为换行符,如果我使用此代码 rows.getString("WA").replace(System.getProperty("line.separator"), "").toString() 它可以工作,但我如何在没有系统检测到它作为换行符的情况下保留“##”?
  • Java 不解释 '#' 字符。它是 SAP GUI 屏幕,它不显示实际存在的内容。您的数据中没有“#”字符。这些是仅由 SAP GUI 为不可打印字符显示的替换/替换字符。要么通过删除控制字符(字符代码点
  • 此外,换行符在不同的操作系统上看起来会有所不同。 Java 端的“line.separator”字符串可能并不总是有效。另见en.wikipedia.org/wiki/Newline。如果您想安全起见,至少需要分别删除代码点为 0x0D 和 0x0A 的所有 ASCII 字符。
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2013-10-05
  • 1970-01-01
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多