使用Scanner和PrintWriter过滤掉一些文本行

时间:2013-06-03 23:42:05

标签: parsing text java.util.scanner printwriter

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

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();
}

有人可以帮帮我吗?我不知道为什么。据我所知,我的代码应该可以正常工作。

1 个答案:

答案 0 :(得分:0)

我能够使用BufferedReader,InputStreamReader和FileInputStream解析大文本文件。所以现在我的代码运行正常。至于Scanner,我仍然猜测为什么这不起作用。我确信它缺乏大量的文件支持,但是有人能指出为什么BufferedReader特别有用以及为什么Scanner无法工作?