— Привіт, Аміго, ще раз.
— І тобі привіт, Ріша. Про що буде сьогоднішня лекція?
— Сьогодні я тобі розповім про Reader та Writer.
— Але, Ріша, я вже майже все про них знаю!
— Повторення — мати вчення.
— Гм. Ну, бл.
— Reader і Writer – це аналоги InputStream і OutputStream, але на відміну від них, вони працюють не з байтами, а із символами. Іноді їх ще називають символьними потоками, на противагу InputStream і OutputStream – байтовим потокам.
— Один символ – два байти, я пам'ятаю.
— Справа не лише в цьому. Ці класи спеціально орієнтовані для роботи з текстом та рядками. Сьогодні ми розглянемо дві класичні реалізації цих абстрактних класів – класи 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() |
Повертає поточне кодування потоку. |
— Ну, я майже все знаю. А 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() |
Повертає поточне кодування потоку. |
І це знаю!
— Так, але це чудово. Тоді давай розберемо один цікавий приклад, а Дієго потім дасть тобі ще завдання.
Як прочитати файл рядково? Чи зможеш написати код?
— Легко дивись:
//створюємо список для зберігання рядків
List<String> list = new ArrayList<String>();
// відкриваємо файл
File file = новий File("c:/document.txt");
BufferedReader reader = новий BufferedReader(new FileReader(file));
//поки файл не порожній - читаємо з нього
while (reader.ready())
{
list.add(reader.readLine());
}
//закриваємо файл
reader.close();
— Гм. Непогано.
— Не погано? Та тут все просто та красиво. Зізнайся, Ріша, що я вже добре володію потоками введення-виводу. Ну що тут можна покращити?
— Наприклад, можна зробити так:
File file = new File("< span class="text-green">c:/document.txt");
List list = Files.readAllLines(file.toPath(), Charset.defaultCharset());
— Гм. Справді коротше. І тільки сьогодні ви мені розповідали про всі ці методи. Відпрацьовуватиму. Дякую за урок, Ріша.
— Успіхів, Аміго.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ