一、File 類關注的是文件在磁盤上的存儲,而FileInputStream流類關注的是文件的內容。 二、關於InputStream和Reader; InputStream提供的是字節流的讀取,使用InputStream讀取出來的是byte數組,而非文本讀取,用Reader讀取出來的是char數組或者String,這是InputStream和Reader類的根本區別。 InputStreamReader可以將讀如stream轉換成字符流方式,是reader和stream之間的橋樑. Reader類及其子類提供的字符流的讀取char(16位,unicode編碼),inputStream及其子類提供字節流的讀取byte(8位),所以FileReader類是將文件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件; FileInputStream以字節爲單位(非 unicode )的流處理。字節序列即:二進制數據。與編碼無關,不存在亂碼問題。 FileInputStream :以字節流方式讀取; FileReader :把文件轉換爲字符流讀入; 三、常用的Reader類 FileReader ,InputStreamReader ,BufferedReader FileReader 與 InputStreamReader 涉及編碼轉換,可能在不同的平臺上出現亂碼現象。 (FileInputStream 以二進制方式處理,不會出現亂碼現象。) FileReader是InputStreamReader 類的子類。 InputStreamReader 的構造函數參數爲InputStream 和編碼方式,當要指定編碼方式時,必須使用 InputStreamReader 類。 FileReader 構造函數的參數與 FileInputStream 同,爲 File 對象或表示 path 的 String。 1、FileReader的用法 FileReader fr = new FileReader("file.txt"); 2、InputStreamReader的用法 InputStreamReader isr = new InputStreamReader(new FileInputStream("file.txt")); 3、BufferedReader的用法。 BufferedReader 由Reader類擴展而來,提供通用的緩衝方式文本讀取,而且提供了很實用的readLine,讀取分行文本很適合,BufferedReader是針對Reader的,不直接針對文件,也不是隻針對文件讀取。 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"))); 四、用法總結 1) File file = new File ("file.txt"); FileInputStream in=new FileInputStream(file); 2) File file = new File ("file.txt"); FileInputStream in=new FileInputStream(file); InputStreamReader inReader=new InputStreamReader(in); BufferedReader bufReader=new BufferedReader(inReader); 3) File file = new File ("file.txt"); FileReader fileReader=new FileReader(file); BufferedReader bufReader=new BufferedReader(fileReader); |