java讀文件

java.io.*;

public abstract class Reader implements Readable,Closeable{}

    public class BufferedReader extends Reader{

        public BufferedReader(Reader in);創建一個使用默認大小輸入緩衝區的緩衝字符輸入流。

        public BufferedReader(Reader in, int sz);創建一個使用指定大小輸入緩衝區的緩衝字符輸入流。

}

public class InputStreamReader extends Reader{

    public InputStreamReader(InputStream in);創建一個使用默認字符集的 InputStreamReader

    public InputStreamReader(InputStream in, StringcharsetName); 創建使用指定字符集的InputStreamReader     

    public InputStreamReader(InputStream in, Charset cs);創建使用給定字符集的 InputStreamReader

    public InputStreamReader(InputStream in, CharsetDecoderdec);創建使用給定字符集解碼器的 InputStreamReader

         }

        public class FileReader extends InputStreamReader{

            public FileReader(String fileName){ super(new                 FileInputStream(fileName));}

            public FileReader(File file) {super(new FileInputStream(file));}  

            public FileReader(FileDescriptor fd) {  super(newFileInputStream(fd));             }

        }

 

public abstract classInputStream implements Closeable{}

    public class FileInputStream extends InputStream{

        public FileInputStream(String name) throws FileNotFoundException {this(name != null ? new File(name) : null); }

        public FileInputStream(File file);

        public FileInputStream(FileDescriptorfdObj);

}

         FileInputStream從文件系統中的某個文件中獲得輸入字節。

        

public class File implements Serializable,Comparable<File>{

   public File(String pathname);

   public File(String parent,String child);

public File(File parent, String child);

   public File(URI uri);

}

 

 

Reader是用於讀取字符流的抽象類;InputStream提供的是字節流的讀取,而非文本讀取,這是和Reader類的根本區別。即用Reader讀取出來的是char數組或者String ,使用InputStream讀取出來的是byte數組。

 

BufferedReader Reader類擴展而來,提供通用的緩衝方式文本讀取,而且提供了很實用的readLine,讀取分行文本很適合,BufferedReader針對Reader的,不直接針對文件,也不是隻針對文件讀取。BufferedReader的最大特點就是緩衝區的設置。通常Reader所作的每個讀取請求都會導致對底層字符或字節流進行相應的讀取請求,如果沒有緩衝,則每次調用 read() readLine() 都會導致從文件中讀取字節,並將其轉換爲字符後返回,而這是極其低效的。 使用BufferedReader可以指定緩衝區的大小,或者可使用默認的大小。大多數情況下,默認值就足夠大了。因此,建議用 BufferedReader 包裝所有其 read() 操作可能開銷很高的 Reader(如 FileReader InputStreamReader)。例如:

 BufferedReader in = new BufferedReader(newInputStreamReader(System.in));

 

InputStreamReader 是字節流通向字符流的橋樑:它使用指定的 charset 讀取字節並將其解碼爲字符。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平臺默認的字符集。

每次調用 InputStreamReader 中的一個 read() 方法都會導致從底層輸入流讀取一個或多個字節。InputStreamReader最大的特點是可以指轉換的定編碼格式,這是其他類所不能的,從構造方法就可看出,這一點在讀取中文字符時非常有用。

 

FileReader與它的父類InputStreamReader的主要不同在於構造函數,主要區別也就在於構造函數!

                  

 

InputStream是表示字節輸入流的所有類的超類。

我們都知道計算機能識別的只有01,數據是以字節爲單位存儲的。

   a.故在java中,我們若想要從文件中讀取一個字符,首先我們需要有一個文件(數據源),於是我們就使用到了File類來制定一個文件;

   b. 因爲數據在計算機中都是01代碼,以字節爲單位,所以我們所指定的file對象就需要先轉化成字節流,所以需要用到InputStream類;

   c. 這時候,如果在java中只是以字節來讀取文件的話,就足夠了。但是如果想要以字符來讀取文件的話,還需要對字節流進行以某種方式編碼,因爲不同的字符采用不同的編碼方式,如果仍然使用字節流的話,可能會達不到我們想要的效果。我們可以指定字符編碼方式,這個通過在InputStreamReader相關類的構造器中指定並實例化,默認下是Unicode編碼方式。到了這裏,我們已經用到了InputStreamReader

   d. 經過了上面三個步驟,我們已經可以從文件中讀取到一個字符了,但是每次只讀取一個字符又不能滿足我們讀取大數據的需求,這時候BufferedReader就派上用場了。從名字中的Buffer我們可以推測出它具有緩衝的作用,事實也是如此,它可以一次讀取多個字符,一次性讀取的字符數目還可以自由設置。

 

用法:

Filefile = newFile("E:/abc/1.txt");

1.   if(!file.exists())   

2.      {   

3.          try {   

4.               file.getParentFile().mkdir(); //如果文件夾不存在則先創建文件夾

5.              file.createNewFile();   

6.          } catch (IOException e) {   

7.              // TODO Auto-generated catch block

8.              e.printStackTrace();   

9.          }   

10.    }    

 

1FileInputStream fit = new FileInputStream(file);//以二進制方式處理,不會出現亂碼現象;處理非純文本文件;-讀取出來是byte數據

InputStreamReader isr = new InputStreamReader(fit,"UTF-8");

BufferedReader br = new BufferedReader(isr);

 

//InputStreamReader讀取char數據

int ch = 0;

while((ch=isr.read())!=-1){ System.out.println((char)ch); }

 

(2)FileReader fr = new FileReader(file);//處理純文本文件,InputStreamReader的子類

 

//FileReader讀取char數據

int ch = 0;

while((ch = fr.read())!=-1 ) {System.out.println((char)ch); }

        

(3)FileReader fr = new FileReader(file);

   BufferedReaderbr = newBufferedReader(fr);

 

//BufferedReader讀取String數據

String ch = "";

while((ch=br.readLine())!=null){System.out.println(ch);}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章