【问题标题】:Java scanner reading garbageJava 扫描器读取垃圾
【发布时间】:2014-12-21 08:34:00
【问题描述】:

我正在使用 java Scanner 读取文本文件。

try {
            while(sc.hasNextLine()) {
                //Read input from file
                inputLine = sc.nextLine().toUpperCase();
                System.out.println(inputLine);
}

上面给出了以下输出,而我的文本文件只包含“aabbcc”。 如何避免扫描仪扫描垃圾? 谢谢。

{\RTF1\ANSI\ANSICPG1252\COCOARTF1265\COCOASUBRTF210
{\FONTTBL\F0\FSWISS\FCHARSET0 HELVETICA;}
{\COLORTBL;\RED255\GREEN255\BLUE255;}
\PAPERW11900\PAPERH16840\MARGL1440\MARGR1440\VIEWW10800\VIEWH8400\VIEWKIND0
\PARD\TX566\TX1133\TX1700\TX2267\TX2834\TX3401\TX3968\TX4535\TX5102\TX5669\TX6236\TX6803\PARDIRNATURAL

\F0\FS24 \CF0 AABBCC}

【问题讨论】:

  • 您的文件真的以 .txt 结尾吗?
  • 这看起来不像是在阅读文本文件。当你在一个简单的文本编辑器中显示它时(或者,在 posix 机器上,如果你把它放到终端上),你会看到什么?
  • 您需要将文档保存为纯文本文件,而不是 *.rtf 文件。

标签: java java.util.scanner


【解决方案1】:

您正在阅读一个 RTF 文档。如果您只想阅读文本,可以尝试将其读入字节数组并使用 swings rtfeditorkit 解析出文本。

Path path = Paths.get("path/to/file");
byte[] data = Files.readAllBytes(path);

RTFEditorKit rtfParser = new RTFEditorKit();
Document document = rtfParser.createDefaultDocument();
rtfParser.read(new ByteArrayInputStream(data), document, 0);
String text = document.getText(0, document.getLength());

【讨论】:

    【解决方案2】:

    问题不在于扫描器正在读取垃圾。那是您的文件不是纯文本。从外观上看,您的文件实际上是“富文本”,并且该垃圾包含格式信息。通过使用 MS WordPad 保存 .rtf,我能够产生类似的输出。

    【讨论】:

      【解决方案3】:

      这已通过将 TextEdit 首选项、格式设置为“纯文本”并重新创建输入文件来解决。 设法获得没有垃圾的输出。

      来源:File input in Java for Mac

      【讨论】:

      • 如果我能再次投票,我会的。只花了大约 3 个小时试图弄清楚如何解决这个问题
      猜你喜欢
      • 2023-01-07
      • 2018-10-15
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多