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 を使用して、大きなテキスト ファイルを解析できました。だから今私のコードは正常に動作します。Scanner に関しては、なぜこれがうまくいかなかったのか、私はまだ推測しています。大きなファイルのサポートがないことは確かですが、特に BufferedReader が機能する理由と Scanner が機能しない理由を誰か指摘できますか?

于 2013-06-04T00:15:50.127 に答える