IO:字符流、字節流

IO

流按操作數據分爲兩種:字節流與字符流

流按流向分爲:輸入流、輸出流

 

字節流的抽象基類:

InputStream

OutputStream

 

字符流的抽象基類:

Reader

Witer

這四個類派生出來的子類名稱都是以其父類名作爲子類名的後綴。

 

字符流:寫入流Writer

用於操作文件的Writer子類對象,FileWriter,後綴名是父類名,前綴名是該流對象的功能。

    創建一個FileWriter對象,該對象一被初始化就必須要有被操作的文件。而且該文件會被創建到指定的目錄下。如果該目錄下已有同名文件,將被覆蓋。

FileWriter fw = new FileWriter(“F:\\test.txt”);

構造方法需要捕捉異IO異常。

    調用write方法,將字符串寫入流中。

fw.writer(“asdfdsasfdsa”);

    刷新流對象中的緩衝中的數據,將數據寫到目的地中。

fw.flush();

fw.close();

關閉流資源,關閉之前會刷新一次內部的緩衝中的數據。將數據刷到目的地中。和flush區別:flush刷新後,流可以繼續使用,close刷新後,會將流關閉。

 

IO異常的處理方式

         FileWriterfw = null;

         try{               

                fw = newFileWriter("D:\\aaa.txt");             

                fw.write("aaaadfsda");         

                fw.flush();

         }catch(IOExceptione){                

                System.out.println(e.toString());

         }finally{                 

                try{

                       if(fw!=null)

                              fw.close();

                }catch(IOException e){

                       System.out.println(e.toString());

                }

              }

 

已有文件內容的續寫

FileWriter的構造方法中,加入true參數代表不覆蓋已有的文件,並在已有文件的末尾處進行數據的續寫。

\r\n

 

字符流:寫入流Reader

FileReader子類,實例化時需指定要讀取的文件。

第一種方式:通過字符讀取

    創建一個文件讀取的流對象,和指定名稱的文件相關聯。要保證該文件是已經存在的,如果不存,會發生異常:FileNotFoundException

FileReader fr = new FileReader(“D:\\test.txt”);

    調用讀取流對象的read方法。

數據類型   變量名=fr.read();

read():一次只讀一個字符,而且會自動往下讀。如果已到達流的末尾,則返回-1

while((ch=fr.read())!=-1){

  System.out.println(ch);

}

       第二種方式:通過字符數組進行讀取

    定義一個字符數組,用於存儲讀到字符。該read(char[])返回的是讀到字符個數。

FileReader fr = new FileReader(“D:\\test.txt”);

char[] ch = new char[3];

int num=0;

while((num=fr.read(ch))!=-1){

System.out.println(newString(ch,0,num));

}

fr.close();

 

複製文本文件,從C盤拷貝至D盤。

    D盤創建一個文件,用於存儲C盤文件中的數據。

    定義讀取流和C盤文件關聯。

    通過不斷的讀寫完成數據存儲。

    關閉資源

FileReader fr = new FileReader("D:\\aa.txt");
  FileWriter fw = new FileWriter("D:\\tmp\\aa_copy.txt");
  
  char[] ch = new char[1024];
  int num=0;
  while((num = fr.read(ch))!=-1){
   
   fw.write(ch,0,num);
   fw.flush();
  }
  
  fw.close();
  fr.close();

發佈了67 篇原創文章 · 獲贊 8 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章