"Здравей, Амиго! Вчера Риши ти каза за FileInputStream и FileOutputStream . А днес ще ти разкажа за класовете FileReader и FileWriter ."

Както вероятно вече се досещате, всички тези класове са адаптери между File обекта и «интерфейсите» InputStream , OutputStream , Reader и Writer .

„Те са подобни на адаптери между File и Reader/Writer, но трябва само да предадете String обект на конструктора, а не File!“

"Всъщност те имат няколко конструктора. Има конструктори Howто за File, така и за String обекти. Ако подадете String обект към конструктора, тогава конструкторът тихо ще създаде File обект, използвайки файловия път, взет от предадения String обект."

Това е за удобство. Създателите на Java взеха най-честите случаи на употреба за тези класове и написаха конструктори за всички тях. Това е доста удобно, не мислите ли?

"О, да. Удобно. Съгласен съм. Но защо тогава трябва постоянно да пиша:"
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
„Защо не добавиха този случай на употреба?“

„Проблемът тук е, че   типичната програма на Java не работи с конзолата. Всъщност почти никога не четете нищо от нея. Дори с уеб сървър, сървър за applications or друга сложна система.“

Но имаме PrintStream за извеждане на данни и текст към конзолата. Тъй като тези „сървърни applications“ често използват конзолата, за да покажат своето състояние, грешки и всяHowва друга информация.

„Разбрах. И можете също да копирате файл с помощта на FileReader и FileWriter?“

„Да, ако е текстов файл (т.е. състои се от знаци). Ето един пример:“

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

 while (reader.ready()) //as long as there are unread bytes in the input stream
 {
  int data = reader.read(); //Read one character (the char will be widened to an int)
  writer.write(data); //Write one character (the int will be truncated/narrowed to a char)
 }

 //Close the streams after we done using them
 reader.close();
 writer.close();
}

"Почти ниHowви разлики."

— Да, разликите са минимални.