一、字符輸出流
java.io.Writer 抽象類是表示用於寫出字符流的所有類的超類,將指定的字符信息寫出到目的地。
它定義了字節輸出流的基本共性功能方法。
void write(int c) 寫入單個字符。寫入0 到 65535 之間的Unicode碼。
void write(char[] cbuf) 把整個字符數組的內容寫進去。
abstract void write(char[] cbuf, int off, int len) 寫入字符數組的某一部分,off數組的開始索引,len寫的字符個數。
void write(String str) 寫入字符串。
void write(String str, int off, int len) 寫入字符串的某一部分,off字符串的開始索引,len寫的字符個數。
void flush() 刷新該流的緩沖,則立即將它們寫入預期目標。
void close() 關閉此輸出流並釋放與該流關聯的所有系統資源
Writer 抽象類下面的子類結構:
圖中深色的為節點流,淺色的為處理流。
二、FileWriter 類
java.io.FileWriter 類是寫出字符到文件的便利類。構造時使用系統默認的字符編碼和默認字節緩沖區 。
作用:把內存中字符數據寫入到文件中。
1、構造方法
FileWriter(File file) : 創建一個新的 FileWriter,給定要讀取的File對象。
FileWriter(String fileName) : 創建一個新的 FileWriter,給定要讀取的文件的名稱。
參數:寫入數據的目的地。
File file:文件對象
String fileName:文件的路徑。
構造方法作用:
① 會創建一個 FileWriter 對象
② 會根據構造方法中傳遞的文件 / 文件的路徑,創建對象
③ 會把 FileWriter 對象指向創建好的文件。
字符輸出流的使用步驟【重要】:
① 創建FileWriter對象,構造方法中綁定要寫入數據的目的地
② 使用FileWriter中的方法write,把數據寫入到內存緩沖區中(字符轉換為字節的過程)
③ 使用FileWriter中的方法flush,把內存緩沖區中的數據,刷新到文件中
④ 釋放資源(會先把內存緩沖區中的數據刷新到文件中)
2、基本寫入數據
(1)寫出字符:write(int b) 方法,每次可以寫出一個字符數據,代碼使用演示:
1 public static void main(String[] args) throws IOException { 2 //1.創建FileWriter對象,構造方法中綁定要寫入數據的目的地
3 FileWriter fw = new FileWriter("E:\\d.txt"); 4 //2.使用FileWriter中的方法write,把數據寫入到內存緩沖區中(字符轉換為字節的過程) 5 //void write(int c) 寫入單個字符。
6 fw.write(97); 7 //3.使用FileWriter中的方法flush,把內存緩沖區中的數據,刷新到文件中 8 fw.flush(); 9 //4.釋放資源(會先把內存緩沖區中的數據刷新到文件中)
10 fw.close(); 11 }
注意:如果未調用 close 方法,數據只是保存到了緩沖區,並未寫出到文件中。
(2)關閉與刷新
區別:
flush :刷新緩沖區,流對象可以繼續使用。
close : 先刷新緩沖區,然后通知系統釋放資源。流對象不可以再被使用了。
Demo:
1 public static void main(String[] args) throws IOException { 2 //1.創建FileWriter對象,構造方法中綁定要寫入數據的目的地
3 FileWriter fw = new FileWriter("E:\\e.txt"); 4 //2.使用FileWriter中的方法write,把數據寫入到內存緩沖區中(字符轉換為字節的過程) 5 //void write(int c) 寫入單個字符。
6 fw.write(97); 7 //3.使用FileWriter中的方法flush,把內存緩沖區中的數據,刷新到文件中
8 fw.flush(); 9 //刷新之后流可以繼續使用
10 fw.write(98); 11
12 //4.釋放資源(會先把內存緩沖區中的數據刷新到文件中)
13 fw.close(); 14
15 //close方法之后流已經關閉了,已經從內存中消失了,流就不能再使用了
16 fw.write(99);//IOException: Stream closed
17 }
注意:即便是flush方法寫出了數據,操作的最后還是要調用close方法,釋放系統資源。
3、寫出其他數據
(1)寫出字符數組:write(char[] cbuf) 和 write(char[] cbuf, int off, int len) ,每次可以寫出字符數組中的數據,用法類似FileOutputStream,代碼使用演示:
1 public static void main(String[] args) throws IOException { 2 FileWriter fw = new FileWriter("E:\\f.txt"); 3 char[] cs = {'a','b','c','d','e'}; 4 //void write(char[] cbuf)寫入字符數組。
5 fw.write(cs);//abcde 6
7 //void write(char[] cbuf, int off, int len)寫入字符數組的某一部分,off數組的開始索引,len寫的字符個數。
8 fw.write(cs,1,3);//bcd
9
10 fw.close(); 11 }
(2)寫出字符串:: write(String str) 和 write(String str, int off, int len) ,每次可以寫出字符串中的數據,更為方便,代碼使用演示:
1 public static void main(String[] args) throws IOException { 2 FileWriter fw = new FileWriter("E:\\f.txt"); 3
4 //void write(String str)寫入字符串。
5 fw.write("博客園");//博客園 6
7 //void write(String str, int off, int len) 寫入字符串的某一部分,off字符串的開始索引,len寫的字符個數。
8 fw.write("天道酬勤啊",2,3);//酬勤啊
9
10 fw.close(); 11 }
(3)續寫和換行
續寫,追加寫:使用兩個參數的構造方法
FileWriter(String fileName, boolean append)
FileWriter(File file, boolean append)
參數:
String fileName,File file:寫入數據的目的地。
boolean append:續寫開關 true:不會創建新的文件覆蓋源文件,可以續寫; false:創建新的文件覆蓋源文件。
換行:換行符號
windows:\r\n
Linux / Unix:\n
mac:\r
Demo :
1 public static void main(String[] args) throws IOException { 2 FileWriter fw = new FileWriter("E:\\g.txt",true); 3 for (int i = 0; i <10 ; i++) { 4 fw.write("HelloWorld"+i+"\r\n"); 5 } 6
7 fw.close(); 8 }