0

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

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

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

4

1 回答 1

0

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

于 2013-06-04T00:15:50.127 回答