“嗨,阿米戈,又來了。”
“你好,Rishi。今天的課程是什麼?”
“今天我要給大家介紹一下 Reader 和 Writer。”
“但是,Rishi,我幾乎已經了解了他們的一切!”
“重複是學習之母”。
“嗯。嗯,好的。”
“ 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() |
返回流的當前編碼。 |
“我知道!”
“太好了,那我們再來看一個有趣的例子,等下迭戈會給你佈置更多的任務。”
“如何逐行讀取文件?你會寫代碼嗎?”
“簡單,看:”
代碼
// 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();
“嗯。不錯。”
“還不錯?一切都很簡單,也很漂亮。承認吧,Rishi——我已經對 I/O 線程有了很好的掌握。那麼這裡還有什麼可以改進的嗎?”
“好吧,例如,你可以這樣做:”
Rishi 的代碼
File file = new File("c:/document.txt");
List list = Files.readAllLines(file.toPath(), Charset.defaultCharset());
“嗯。那就更短了。就在今天,你把所有這些方法都告訴了我。我會重寫它。謝謝你的教訓,Rishi。”
“祝你好運,阿米戈。”
GO TO FULL VERSION