JavaRush /Курси /Java Core /FileReader/FileWriter

FileReader/FileWriter

Java Core
Рівень 9 , Лекція 4
Відкрита

— Привіт, Аміго! Вчора Ріша розповідав тобі про FileInputStreamFileOutputStream. А сьогодні я розповім тобі про класиFileReader і FileWriter .

Як ти вже, напевно, здогадався, всі ці класи є адаптерами між об'єктом File та “інтерфейсами” InputStreamOutputStreamReader, Writer.

— Вони схожі на адаптери між File і Reader/Writer, ось тільки конструктор до них потрібно передати об'єкт String, а не File!

— Насправді у них кілька конструкторів: є і File і String. І якщо ти передаси в конструктор класу об'єкт типу String, то в ньому непомітно для тебе створиться об'єкт типу File, за допомогою файлу, взятого з переданого String.

Це зроблено для зручності. Розробники Java взяли найчастіші сценарії використання цих класів і написали для всіх їх конструктори. Це дуже зручно, чи не так?

— Так, зручно, згоден. Але чому тоді мені доводиться постійно писати:
BufferedReader bufferedReader = New BufferedReader(New InputStreamReader(System.in));
Чому вони не додали цей сценарій?

— Справа в тому, що типова програма на Java не працює з консоллю. Точніше, майже ніколи нічого з неї не читає. Це може бути web-сервер, сервер додатків або ще якась складна система.

Але для виведення даних та тексту на консоль додали об'єкт PrintStream. Тому що ті ж «серверні програми» часто пишуть у консоль свій стан роботи, помилки та ще різну інформацію.

— Зрозуміло. А копіювати файл за допомогою FileReader та FileWriter також можна?

— Так, якщо він текстовий (тобто складається із символів). Ось, дивись приклад:

 Копіюємо файл на диску
public static void main(String[] args) throws Exception {
    FileReader reader = новий FileReader("c:/data.txt");
    FileWriter writer = new FileWriter("c:/result.txt");

     while (reader.ready()) //поки є непрочитані байти в потоці введення {
        int data = reader.read(); //читаємо один символ (char буде розширено до int)
        writer.write(data); //пишемо один символ (int буде обрізаний/звужений до char)
    }

    //закриваємо потоки після використання
    reader.close();
    writer.close();
}

— Майже ніяких відмінностей.

— Так, відмінності мінімальні.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ