2013-06-03 2 views
0

Я столкнулся с очень интересным явлением. У меня есть текстовый файл, который имеет свои данные, организованные таким образом:Фильтрация некоторых строк текста с помощью 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(); 
} 

Может кто-нибудь мне помочь? Я не знаю, почему. Насколько я вижу, мой код должен работать отлично.

ответ

0

Мне удалось разобрать большой текстовый файл, используя BufferedReader, InputStreamReader и FileInputStream. Итак, теперь мой код работает нормально. Что касается Сканера, я все еще догадываюсь, почему это не сработало. Я точно знаю, что ему не хватает поддержки большого файла, но может ли кто-нибудь указать, почему именно BufferedReader работает и почему Сканер не работает?

Смежные вопросы