"Hej, Amigo, ännu en gång."

"Hej på dig, Rishi. Vad kommer dagens lektion att handla om?"

"Idag ska jag berätta om läsare och författare."

"Men Rishi, jag vet nästan allt om dem redan!"

"Repetition är lärandets moder."

"Hmm. Nåväl, okej."

" Reader och Writer är analoger till InputStream och OutputStream , men de fungerar med tecken, inte byte. Ibland kallas de också för teckenströmmar, till skillnad från  InputStream  och  OutputStream , som kallas byteströmmar."

"Den ena är för tecken, den andra är för bytes. Jag minns."

"Det är inte bara det. Dessa klasser är speciellt designade för att fungera med text och strängar. Idag ska vi titta på två klassiska implementeringar av dessa abstrakta klasser: FileReader och FileWriter . "

"Här är metoderna för FileReader -klassen:"

Metod Beskrivning
int read() Läser ett tecken från strömmen och returnerar det.
int read(char cbuf[], int offset, int length) Läser en uppsättning tecken, returnerar antalet lästa tecken.
boolean ready() Returnerar sant om det är möjligt att läsa från strömmen.
void close() Stänger ingångsströmmen.
int read(java.nio.CharBuffer target) Läs en uppsättning tecken i en buffert.
int read(char cbuf[]) Läser en rad tecken.
long skip(long n) Hoppar över n tecken i strömmen.
String getEncoding() Returnerar den aktuella kodningen av strömmen.

"Tja, jag vet nästan allt detta. Men hur är det med FileWriter?"

Metod Beskrivning
void write(int c) Skriver ett tecken till strömmen.
void write(char cbuf[], int off, int len) Skriver en rad tecken till strömmen.
void write(char cbuf[]) Skriver en rad tecken till strömmen.
void write(String str, int off, int len) Skriver en del av en sträng till strömmen.
void write(String str) Skriver en sträng till strömmen.
void flush() Skriver allt cachelagrat i minnet till disk.
void close() Stänger strömmen.
String getEncoding() Returnerar den aktuella kodningen av strömmen.

"Jag vet det!"

"Det är underbart. Låt oss sedan titta på ett intressant exempel, och senare kommer Diego att ge dig fler uppgifter."

"Hur läser du en fil rad för rad? Kan du skriva koden?"

"Lätt, titta:"

Koda
// 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. Inte illa."

"Inte illa? Allt är enkelt och vackert. Erkänn det, Rishi - jag har redan en utmärkt behärskning av I/O-trådar. Så vad kan förbättras här?"

"Tja, du kan till exempel göra så här:"

Rishis kod
File file = new File("c:/document.txt");

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

"Hmm. Det är kortare. Och just idag berättade du för mig om alla dessa metoder. Jag ska omarbeta det. Tack för lektionen, Rishi."

"Lycka till, Amigo."