【问题标题】:Filtering out some lines of text using Scanner and PrintWriter使用 Scanner 和 PrintWriter 过滤掉一些文本行
【发布时间】:2013-06-03 23:42:05
【问题描述】:

我遇到了一个非常有趣的现象。我有一个文本文件,它的数据以这种方式组织:

2013-03-26T09:42:29 -1000 {"address": 6, "uptime_ms": 1354663, "bmp085_temp_decic": 307, "bmp085_press_pa": 101084, "batt_mv": 3284, "panel_mv": 4887, "apogee_mv": 247, "apogee_w_m2": 1235}

这段文字大约有 10^6 行。其中一些是垃圾线。我编写了一个代码,它会过滤掉有意义的行并将它们写入单独的文本中,这样我就可以拥有一个没有垃圾的数据文件。如果一行有“{”,我会区分它是否“有用”。如果没有,则跳过该行。

但是发生了一些奇怪的事情,我的文件停止读取大约 45,000 行的输入文本文件,并且我新写入的文件永远不会完成。我觉得它应该返回某种错误,但它没有并说我的代码已成功执行。我的代码如下所示:

   public void cleanFile() throws FileNotFoundException, UnsupportedEncodingException {
    File file = new File("/home/foo/a/screenlog.txt");
    Scanner scanner = new Scanner(file);
    PrintWriter pw = new PrintWriter("/home/foo/a/scrlog.0");
    while(scanner.hasNextLine()) {
        String line = scanner.nextLine();
        if(line.contains("{")) {
            pw.println(line);
        }
    }
    scanner.close();
    pw.close();
}

有人可以帮帮我吗?我不知道为什么。据我所知,我的代码应该可以完美运行。

【问题讨论】:

    标签: parsing text java.util.scanner printwriter


    【解决方案1】:

    我能够使用 BufferedReader、InputStreamReader 和 FileInputStream 解析大文本文件。所以现在我的代码工作正常。至于扫描仪,我仍在猜测为什么这不起作用。我肯定知道它缺乏对大文件的支持,但是谁能指出为什么 BufferedReader 可以工作以及 Scanner 为什么不能工作?

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 2021-06-14
      相关资源
      最近更新 更多