„Здравей, Амиго, още веднъж.“

„Здравей и на теб, Риши. За Howво ще бъде днешният урок?“

„Днес ще ви разкажа за „Четец и писател“.

— Но, Риши, вече знам почти всичко за тях!

"Повторението е майката на ученето."

"Хм. Е, добре."

" Reader и Writer са аналози на InputStream и OutputStream , но работят със знаци, а не с byteове. Понякога се наричат ​​също потоци от символи, за разлика от  InputStream  и  OutputStream , които се наричат ​​потоци от byteове."

„Едното е за символи, другото е за byteове. Спомням си.“

"Не е само това. Тези класове са специално проектирани да работят с текст и низове. Днес ще разгледаме две класически реализации на тези абстрактни класове: FileReader и FileWriter ."

„Ето методите на класа FileReader :“

Метод Описание
int read() Чете един символ от потока и го връща.
int read(char cbuf[], int offset, int length) Чете масив от знаци, връща броя прочетени знаци.
boolean ready() Връща true, ако е възможно да се чете от потока.
void close() Затваря входния поток.
int read(java.nio.CharBuffer target) Прочетете набор от знаци в буфер.
int read(char cbuf[]) Чете масив от знаци.
long skip(long n) Пропуска n знака в потока.
String getEncoding() Връща текущото codeиране на потока.

„Е, знам почти всичко това. Но Howво да кажем за FileWriter?“

Метод Описание
void write(int c) Записва един знак в потока.
void write(char cbuf[], int off, int len) Записва масив от знаци в потока.
void write(char cbuf[]) Записва масив от знаци в потока.
void write(String str, int off, int len) Записва част от низ в потока.
void write(String str) Записва низ в потока.
void flush() Записва всичко кеширано в паметта на диск.
void close() Затваря потока.
String getEncoding() Връща текущото codeиране на потока.

"Знам това!"

"Това е чудесно. Тогава нека да разгледаме един интересен пример и по-късно Диего ще ви даде още задачи."

"Как четете файл ред по ред? Можете ли да напишете codeа?"

"Спокойно, вижте:"

Код
// Create a list for storing the lines
List<String> list = new ArrayList<String>();

// Open the file
File file = new File("c:/document.txt");
BufferedReader reader = new BufferedReader(new FileReader(file));

// As long as the file isn't empty, read from it
while (reader.ready())
{
 list.add(reader.readLine());
}

// Close the file
reader.close();

"Хм. Не е лошо."

„Не е зле? Всичко е просто и красиво. Признай си, Риши – вече владея отлично I/O нишки. И така, Howво може да се подобри тук?“

"Ами, например, можете да направите това:"

Кодът на Риши
File file = new File("c:/document.txt");

List list = Files.readAllLines(file.toPath(), Charset.defaultCharset());

"Хм. Това е по-кратко. И точно днес ми каза за всички тези методи. Ще го преработя. Благодаря ти за урока, Риши."

— Успех, Амиго.