– Szia Amigo, még egyszer.

– Szia, Rishi. Miről fog szólni a mai óra?

– Ma az Olvasóról és az Íróról fogok mesélni.

– De Rishi, én már szinte mindent tudok róluk!

"Az ismétlés a tanulás anyja."

"Hmm. Nos, rendben."

" A Reader és a Writer az InputStream és az OutputStream analógjai , de nem bájtokkal, hanem karakterekkel dolgoznak. Néha karakterfolyamnak is nevezik őket, szemben  az InputStream  és  OutputStream-mel , amelyeket bájtfolyamoknak neveznek."

"Az egyik a karakterek, a másik a bájtok. Emlékszem."

"Nem csak erről van szó. Ezeket az osztályokat kifejezetten arra tervezték, hogy szövegekkel és karakterláncokkal dolgozzanak. Ma ezeknek az absztrakt osztályoknak két klasszikus megvalósítását fogjuk megvizsgálni: a FileReader-t és a FileWriter-t ."

"Íme a FileReader osztály metódusai :"

Módszer Leírás
int read() Beolvas egy karaktert az adatfolyamból, és visszaadja.
int read(char cbuf[], int offset, int length) Beolvassa a karakterek tömbjét, visszaadja az olvasott karakterek számát.
boolean ready() Igaz értéket ad vissza, ha lehet olvasni az adatfolyamból.
void close() Bezárja a bemeneti adatfolyamot.
int read(java.nio.CharBuffer target) Olvasson be egy karakterkészletet egy pufferbe.
int read(char cbuf[]) Beolvassa a karakterek tömbjét.
long skip(long n) n karaktert kihagy az adatfolyamban.
String getEncoding() Az adatfolyam aktuális kódolását adja vissza.

"Nos, én ezt majdnem mind tudom. De mi van a FileWriterrel?"

Módszer Leírás
void write(int c) Egy karaktert ír az adatfolyamba.
void write(char cbuf[], int off, int len) Karaktertömböt ír az adatfolyamba.
void write(char cbuf[]) Karaktertömböt ír az adatfolyamba.
void write(String str, int off, int len) Egy karakterlánc egy részét írja az adatfolyamba.
void write(String str) Karakterláncot ír az adatfolyamba.
void flush() A memóriában tárolt mindent lemezre ír.
void close() Bezárja a patakot.
String getEncoding() Az adatfolyam aktuális kódolását adja vissza.

"Tudom!"

"Ez csodálatos. Akkor nézzünk egy érdekes példát, és később Diego további feladatokat fog adni."

"Hogyan olvasol sorról sorra egy fájlt? Meg tudod írni a kódot?"

– Nyugi, nézd:

Kód
// 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();

"Hmm. Nem rossz."

"Nem rossz? Mindez egyszerű és gyönyörű. Valld be, Rishi – már most kiválóan mesterkedem az I/O szálakban. Szóval mit lehetne ezen javítani?"

"Nos, például ezt teheted:"

Rishi kódja
File file = new File("c:/document.txt");

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

"Hmm. Ez rövidebb. És pont ma meséltél nekem ezekről a módszerekről. Átdolgozom. Köszönöm a leckét, Rishi."

– Sok szerencsét, Amigo.