Вопрос по FileReader в Java

113
29 июня 2019, 22:50

Стоит задача считать с файла только четные по индексу символы. Например в файле "123456789", считать "2468". Написал код:

    int j = 1;
    FileReader fIn = new FileReader(fileName1);
    while (fIn.ready()) {
        if (j % 2 == 0) {
            list.add((char) fIn.read());
        }
        System.out.println(list.toString()); //Check
        j++;
    }

В консоль вывелось.

[]

[]

[, 1]

[, 1]

[, 1, 2]

[, 1, 2]

[, 1, 2, 3]

[, 1, 2, 3]

[, 1, 2, 3, 4]

[, 1, 2, 3, 4]

[, 1, 2, 3, 4, 5]

[, 1, 2, 3, 4, 5]

[, 1, 2, 3, 4, 5, 6]

[, 1, 2, 3, 4, 5, 6]

[, 1, 2, 3, 4, 5, 6, 7]

[, 1, 2, 3, 4, 5, 6, 7]

[, 1, 2, 3, 4, 5, 6, 7, 8]

[, 1, 2, 3, 4, 5, 6, 7, 8]

[, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Вопрос:

  1. Почему в список добавились все символы из файла, хотя стоит проверка.
  2. Почему выводятся по два раза list.toString, а последний один раз?
Answer 1

Вы в любом случае считаете все символы, т.к. считывание происходит только в случае кратности счетчика.

Нужно считать и пропускать ненужные символы:

int j = 1;
FileReader fIn = new FileReader(fileName1);
while (fIn.ready()) {
    char c = (char) fIn.read();
    if (j % 2 == 0) {
        list.add(c);
    }
    System.out.println(list.toString()); //Check
    j++;
}
Answer 2

Можно читать файл с произвольного места. Например четные по индексу символы:

    RandomAccessFile raf = new RandomAccessFile(fileName, "r");
    for (long i = 1; i < raf.length(); i += 2) {
        byte[] symbol = new byte[1];
        raf.seek(i);
        raf.read(symbol);
        System.out.println(new String(symbol)); // 2 4 6 8
    }
READ ALSO
Преобразовать данные из MongoDB

Преобразовать данные из MongoDB

Есть класс Person, в нем есть поле nameЯ записываю эти данные в Mongo, но на выходе, хочу получать не записанные по 1-у классы, а все поля name из них, но в List<String>

121
хочу понять принцип как сработал код

хочу понять принцип как сработал код

я вот хочу дебажить но при открытии дебага показывает только результат в консоли но кнопочки у дебага не активныеэто один из вопросов

131
RuntimeException: Unable to resume activity

RuntimeException: Unable to resume activity

Проблема в том, что в onPause вы ставите camera = null;, а потом в onResume пытаетесь открыть camera = Cameraopen(); Естественно, оно падает

119