"Xin chào, Amigo, một lần nữa."

"Chào em, Rishi. Bài học hôm nay sẽ là gì?"

"Hôm nay tôi sẽ nói với các bạn về Reader và Writer."

"Nhưng, Rishi, tôi đã biết hầu hết mọi thứ về họ!"

"Sự lặp lại là mẹ của việc học."

"Hừm. Được rồi."

" ReaderWriter tương tự như InputStreamOutputStream , nhưng chúng hoạt động với các ký tự, không phải byte. Đôi khi, chúng còn được gọi là luồng ký tự, trái ngược với  InputStream  và  OutputStream , được gọi là luồng byte."

"Một cái dành cho ký tự, cái kia dành cho byte. Tôi nhớ."

"Không chỉ vậy. Các lớp này được thiết kế đặc biệt để làm việc với văn bản và chuỗi. Hôm nay chúng ta sẽ xem xét hai cách triển khai cổ điển của các lớp trừu tượng này: FileReaderFileWriter ."

"Đây là các phương thức của lớp FileReader :"

Phương pháp Sự miêu tả
int read() Đọc một ký tự từ luồng và trả về ký tự đó.
int read(char cbuf[], int offset, int length) Đọc một mảng ký tự, trả về số ký tự đã đọc.
boolean ready() Trả về true nếu có thể đọc từ luồng.
void close() Đóng luồng đầu vào.
int read(java.nio.CharBuffer target) Đọc một bộ ký tự vào bộ đệm.
int read(char cbuf[]) Đọc một mảng ký tự.
long skip(long n) Bỏ qua n ký tự trong luồng.
String getEncoding() Trả về mã hóa hiện tại của luồng.

"Chà, tôi biết gần như tất cả những thứ này. Nhưng còn FileWriter thì sao?"

Phương pháp Sự miêu tả
void write(int c) Ghi một ký tự vào luồng.
void write(char cbuf[], int off, int len) Ghi một mảng ký tự vào luồng.
void write(char cbuf[]) Ghi một mảng ký tự vào luồng.
void write(String str, int off, int len) Ghi một phần của chuỗi vào luồng.
void write(String str) Ghi một chuỗi vào luồng.
void flush() Ghi mọi thứ được lưu trữ trong bộ nhớ vào đĩa.
void close() Đóng luồng.
String getEncoding() Trả về mã hóa hiện tại của luồng.

"Tôi biết điều đó!"

"Thật tuyệt vời. Vậy thì hãy xem một ví dụ thú vị, và sau đó Diego sẽ giao cho bạn nhiều nhiệm vụ hơn."

"Làm thế nào để bạn đọc từng dòng một tệp? Bạn có thể viết mã không?"

"Bình tĩnh, nhìn này:"

Mã số
// 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();

"Hừm. Không tồi."

"Không tệ? Tất cả đều đơn giản và đẹp mắt. Thừa nhận đi, Rishi—tôi đã thành thạo xuất sắc các luồng I/O. Vậy có thể cải thiện điều gì ở đây?"

"Chà, ví dụ, bạn có thể làm điều này:"

mật mã Rishi
File file = new File("c:/document.txt");

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

"Hmm. Cái đó ngắn hơn. Và mới hôm nay bạn đã nói với tôi về tất cả những phương pháp này. Tôi sẽ làm lại nó. Cảm ơn vì bài học, Rishi."

"Chúc may mắn, Amigo."