package csdn.java3;
/**
*
* 一、流的分類:
* 1.操作數據單位:字節流、字符流
* 2.數據的流向:輸入流、輸出流
* 3.流的角色:節點流、處理流
*
* 二、流的體系結構
* 抽象基類 節點流(或文件流) 緩衝流(處理流的一種)
* InputStream FileInputStream (read(byte[] buffer)) BufferedInputStream (read(byte[] buffer))
* OutputStream FileOutputStream (write(byte[] buffer,0,len) BufferedOutputStream (write(byte[] buffer,0,len) / flush()
* Reader FileReader (read(char[] cbuf)) BufferedReader (read(char[] cbuf) / readLine())
* Writer FileWriter (write(char[] cbuf,0,len) BufferedWriter (write(char[] cbuf,0,len) / flush()
*
*
*/
import java.io.*;
import org.junit.Test;
public class FileReaderWriterTest {
//對read()操作升級:使用read的重載方法
@Test
public void testFileReader1() {
FileReader fr = null;
try {
//1.File類的實例化
File file = new File("D:\\eclipse-workspace\\csdn\\src\\csdn\\java3\\hello.txt");
//2.FileReader流的實例化
fr = new FileReader(file);
//3.讀入的操作
//read(char[] cbuf):返回每次讀入cbuf數組中的字符的個數。如果達到文件末尾,返回-1
char[] cbuf = new char[5];
int len;
while((len = fr.read(cbuf)) != -1){
//方式一:
//錯誤的寫法,難點!
/*for(int i = 0;i < cbuf.length;i++){
System.out.print(cbuf[i]);
}*/
//正確的寫法
for(int i = 0;i < len;i++){
System.out.print(cbuf[i]);
}
//-----------------------------------------------------
//方式二:
//錯誤的寫法,對應着方式一的錯誤的寫法
String str = new String(cbuf);
System.out.print(str);
//正確的寫法
String str1 = new String(cbuf,0,len);
System.out.print(str1);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fr != null){
//4.資源的關閉
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}