字符流基類:Writer、Readerjava
字節流基類:InputStream、OutputStreamwindows
IO流中後綴名爲父類名,前綴名爲該類的功能描述。數組
字符流其實同樣走的字節,他須要把讀好的字節臨時存起來,而後查找編碼表,字符流底層用的也是字節流緩衝區,字符流底層用數組將數據臨時存儲,因此須要刷新動做編輯器
建立FileWriter流對象的示例:ide
需求:在硬盤上,建立一個文件並寫入一些文字數據。 找到一個專門用於操做文件的Writer子類對象。FileWriter。 後綴名是父類名。 前綴名是該流對象的功能。 */ import java.io.*; class FileWriterDemo { public static void main(String[] args) throws IOException { //建立一個FileWriter對象。該對象一被初始化就必需要明確被操做的文件(參數爲被操做的文件名)。 //並且該文件會被建立到指定目錄下。若是該目錄下已有同名文件,將被覆蓋。 //其實該步就是在明確數據要存放的目的地。 FileWriter fw = new FileWriter("demo.txt");//參數可指定路徑如:"D:\\demo.txt"(將demo.txt指定到D盤(windows系統下)) //調用write方法,將字符串寫入到流中。 fw.write("abcde"); //刷新流對象中的緩衝中的數據。 //將數據刷到目的地中。 //fw.flush(); //關閉流資源,可是關閉以前會刷新一次內部的緩衝中的數據。 //將數據刷到目的地中。 //和flush區別:flush刷新後,流能夠繼續使用,close刷新後,會將流關閉。 fw.close(); } }
IO異常處理方式演示:編碼
/* IO異常的處理方式。 */ import java.io.*; class FileWriterDemo2 { public static void main(String[] args) { //在外部建立變量,在後面進行賦值,避免了變量做用域的侷限性。 FileWriter fw = null; try { fw = new FileWriter("demo.txt"); fw.write("abcdefg"); } catch (IOException e) { System.out.println("catch:"+e.toString()); } finally { try { if(fw!=null)//若不爲空則證實建立流對象的操做成功了並未發生異常 fw.close(); } catch (IOException e) { System.out.println(e.toString()); } } } }
演示對已有文件的數據續寫:spa
/* 演示對已有文件的數據續寫。 */ import java.io.*; class FileWriterDemo3 { public static void main(String[] args) throws IOException { //傳遞一個true參數,表明不覆蓋已有的文件。並在已有文件的末尾處進行數據續寫。 //若該文件不存在則建立一個文件。 FileWriter fw = new FileWriter("demo.txt",true); fw.write("nihao\r\nxiexie");//反斜槓r加反斜槓n(\r\n)爲windows系統txt編輯器中的換行。 fw.close(); } }
演示對已有文件的讀取方式:code
reade(char[] cbuf):該方法返回的是讀取字符的個數,該方法將字符讀入參數數組中。對象
import java.io.*; class FileReaderDemo { public static void main(String[] args) { FileReader fr = null; //定義一個字符數組,用於存儲讀到的數據。 //該數組長度通常定義爲1024的整數倍。 char [] array = new char[1024]; int num = 0; try { //建立一個文件讀取流對象,和指定名稱的文件相關聯。 //需保證文件存在,不然會報FileNotFoundException(文件不存在異常) fr = new FileReader("E:\\GUOZHICHAO.txt"); //循環讀取並輸出, while ((num=fr.read(array))!=-1) { System.out.println(new String(array,0,num)); } } catch (IOException e) { System.out.println(e.toString()); } finally { try { if (fr!=null) { fr.close(); } } catch (IOException e) { System.out.println(e.toString()); } } } }
文件的複製過程:blog
//將C盤一個文本文件複製到D盤。 /* 複製的原理: 其實就是將C盤下的文件數據存儲到D盤的一個文件中。 步驟: 1,在D盤建立一個文件。用於存儲C盤文件中的數據。 2,定義讀取流和C盤文件關聯。 3,經過不斷的讀寫完成數據存儲。 4,關閉資源。 */ import java.io.*; class CopyText { public static void main(String[] args) throws IOException { copy_2(); } public static void copy_2() { FileWriter fw = null; FileReader fr = null; try { fw = new FileWriter("SystemDemo_copy.txt"); fr = new FileReader("SystemDemo.java"); char[] buf = new char[1024]; int len = 0; while((len=fr.read(buf))!=-1) { fw.write(buf,0,len); } } catch (IOException e) { //由於讀寫都失敗了處理不了,能夠將流關掉並刪除文件。 throw new RuntimeException("讀寫失敗");//此處爲簡單異常處理 } finally { if(fr!=null) try { fr.close(); } catch (IOException e) { } if(fw!=null) try { fw.close(); } catch (IOException e) { } } } //從C盤讀一個字符,就往D盤寫一個字符。 public static void copy_1()throws IOException { //建立目的地。 FileWriter fw = new FileWriter("RuntimeDemo_copy.txt"); //與已有文件關聯。 FileReader fr = new FileReader("RuntimeDemo.java"); int ch = 0; while((ch=fr.read())!=-1) { fw.write(ch); } fw.close(); fr.close(); } }
英語時間:
File:
Process:
mode:
Writer:
copy: