com.javarush.task.task19.task1906

/*
Четные байты
Считать с консоли 2 имени файла.
Вывести во второй файл все байты с четным индексом.

Пример:
второй байт, четвертый байт, шестой байт и т.д.

Закрыть потоки ввода-вывода.
*/

package com.javarush.task.task19.task1906;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws Exception {

        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileReader fileReader = new FileReader(bufferedReader.readLine());
        FileWriter fileWriter = new FileWriter(bufferedReader.readLine());
        bufferedReader.close();

        int count = 1;

        while (fileReader.ready()){
            if ((count%2)==0){
                fileWriter.write(fileReader.read());
            }
            count++;
        }
        fileReader.close();
        fileWriter.close();
    }
}


Не проходит проверку. Подозреваю, что считывать нужно всё-таки байты, а не символы? Для этого нужно написать адаптер от FileReader к InputStream или как-то по-другому? Какой тогда интерфейс должен реализовывать класс-адаптер, если InputStream это не интерфейс? Или можно унаследоваться от InputStream? Помогите плс, кто шарит. Если что, в задаче обязательно использовать именно FileReader.

5 комментариев

digest
  • digest
  • +1
  • Комментарий отредактирован 2017-03-01 21:47:34 пользователем digest
Сам долго бился над этой задачей.
Вот мой код который прошел валидатор:
package com.javarush.task.task19.task1906;


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        FileReader fileReader = new FileReader(bufferedReader.readLine());
        FileWriter fileWriter = new FileWriter(bufferedReader.readLine());
        fileReader.close();
        int i = 0;
        while(fileReader.ready()) {
            i++;
            int data = fileReader.read();
            if(i % 2 == 0) {
                fileWriter.write(data);
            }
        }
        fileReader.close();
        fileWriter.close();
    }
}
Aronofsky
  • Aronofsky
  • 0
  • Комментарий отредактирован 2017-03-02 00:59:27 пользователем Aronofsky
Спасибо тебе, добрый человек! Но я не вижу в коде никакой разницы… У меня начальное значение счётчика — 1, но инкрементация происходит после всех манипуляций, у тебя начальное значение — 0, но оно увеличивается сразу после входа в цикл. Пока не пробовал отдать на проверку твой код, хотелось бы всё-таки разобраться в причине. Почему, интересно, проходит код, в котором считываются СИМВОЛЫ (или я ошибаюсь?), когда в задании сказано о БАЙТАХ… Как много вопросов и как мало ответов.
Aronofsky
Может кто-то из администрации ресурса озарит своим ликом мой тёмный разум?
AlexSir
Добрый день! Давай разберем твою логику

count = 1 // Установили по умолчанию
read() // while
1 % 2 != 0 // if
count = 2 // count++
read() // while
2 % 2 == 0 // if
c = read() // write(read())
write© // write

мы записали 3 byte. Вот она ошибка.
Aronofsky
Какая смешная ошибка, спасибо!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.