"Здравей, Амиго! Вчера Риши ти каза за 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ви разлики."
— Да, разликите са минимални.
GO TO FULL VERSION