„Cześć, Amigo, jeszcze raz”.

„Cześć, Rishi. O czym będzie dzisiejsza lekcja?”

„Dzisiaj opowiem ci o Readerze i Writerze”.

„Ale, Rishi, wiem już o nich prawie wszystko!”

„Powtarzanie jest matką nauki”.

— Hmm. Cóż, dobrze.

Czytnik i program piszący są odpowiednikami InputStream i OutputStream , ale działają ze znakami, a nie bajtami. Czasami nazywane są również strumieniami znaków, w przeciwieństwie do  InputStream  i  OutputStream , które są nazywane strumieniami bajtów”.

„Jeden dla znaków, drugi dla bajtów. Pamiętam”.

„To nie wszystko. Te klasy są specjalnie zaprojektowane do pracy z tekstem i ciągami znaków. Dzisiaj przyjrzymy się dwóm klasycznym implementacjom tych abstrakcyjnych klas: FileReader i FileWriter ”.

„Oto metody klasy FileReader :”

metoda Opis
int read() Odczytuje jeden znak ze strumienia i zwraca go.
int read(char cbuf[], int offset, int length) Odczytuje tablicę znaków, zwraca liczbę odczytanych znaków.
boolean ready() Zwraca wartość true, jeśli można odczytać ze strumienia.
void close() Zamyka strumień wejściowy.
int read(java.nio.CharBuffer target) Wczytaj zestaw znaków do bufora.
int read(char cbuf[]) Odczytuje tablicę znaków.
long skip(long n) Pomija n znaków w strumieniu.
String getEncoding() Zwraca bieżące kodowanie strumienia.

„Cóż, wiem prawie wszystko. Ale co z FileWriter?”

metoda Opis
void write(int c) Zapisuje jeden znak do strumienia.
void write(char cbuf[], int off, int len) Zapisuje tablicę znaków w strumieniu.
void write(char cbuf[]) Zapisuje tablicę znaków w strumieniu.
void write(String str, int off, int len) Zapisuje część ciągu do strumienia.
void write(String str) Zapisuje ciąg znaków w strumieniu.
void flush() Zapisuje wszystko, co znajduje się w pamięci podręcznej na dysku.
void close() Zamyka strumień.
String getEncoding() Zwraca bieżące kodowanie strumienia.

"Wiem to!"

- To wspaniale. W takim razie spójrzmy na jeden interesujący przykład, a później Diego da ci więcej zadań.

„Jak czytać plik wiersz po wierszu? Czy potrafisz napisać kod?”

„Spokojnie, spójrz:”

Kod
// 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();

„Hm. Nieźle”.

„Nieźle? To wszystko jest proste i piękne. Przyznaj, Rishi – mam już doskonałe opanowanie wątków we/wy. Co więc można tu ulepszyć?”

„Cóż, możesz na przykład zrobić to:”

Kodeks Rishiego
File file = new File("c:/document.txt");

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

"Hmm. To jest krótsze. A właśnie dzisiaj opowiedziałeś mi o tych wszystkich metodach. Przerobię to. Dziękuję za lekcję, Rishi."

– Powodzenia, Amigo.