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();