上次聊到了 java 的字符流 Reader,今天來看看它的好朋友 Writer 字符流。
Writer
java 中的 IO 輸出流不是只有 OutputStream 還有按字符輸出的 Writer。
| OutputStream | Writer |
|---|---|
| 字節(jié)流,以 byte 為單位 | 字符流,以 char 為單位 |
| 輸出字節(jié)(0~255):void write(int b) | 輸出字符(0~65535):void write(int c) |
| 輸出字節(jié)數(shù)組:void write(byte[] b) | 輸出字符數(shù)組:void write(char[] c) |
和 OutputStream 一樣,Writer 也是所有字符輸出流的超類。主要的方法是:public void write(char cbuf[]) throws IOException, write() 方法將 cbuf 參數(shù)全部輸出,write(String str) 和 write(int c) 兩個方法最終調用的還是 write(char cbuf[])
FileWriter
FileWriter 就是向文件中寫入字符流的 Writer。new FileWriter(fileName) 構造函數(shù)是將文件從頭開始寫入并不是在文件結尾處繼續(xù)寫入。new FileWriter(fileName, true) 則是在文件結尾處寫入。
private void fileWriteDemo() throws IOException {
Writer writer = new FileWriter("D:writer.txt");
writer.write("測試寫入".toCharArray());
writer.close();
}
Writer 實現(xiàn)了 Closeable 接口,可以用 try(Writer writer = new FileWriter("D:writer.txt")) {} 的方式關閉掉資源。
OutputStreamWriter
OutputStreamWriter 將輸出的字符流轉換為字節(jié)流。可以使用指定的編碼字符集。new OutputStreamWriter(OutputStream out, Charset cs) 。
private void outputStreamWriteDemo() throws IOException {
// 亂碼
try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:writer.txt"), "gb2312")) {
writer.write("杺");
writer.write(66);
}
// 正常
try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("D:writer.txt", true), "gbk")) {
writer.write("杺");
writer.write(66);
}
}
StringWriter 和 CharArrayWriter
StringWriter 內部有一個 StringBuffer 對象作為其緩沖區(qū)??梢岳闷渚彌_區(qū)中的內容來構造字符串。
private void stringWriteDemo() throws IOException {
String str = "寫入測試";
try(StringWriter writer = new StringWriter()) {
writer.write(str);
writer.write(str);
System.out.println(writer.getBuffer().toString());
}
}
CharArrayWriter 和 StringWriter 幾乎一樣,也是在內存中構造一個字符串緩沖區(qū)。不過底層不是一個 StringBuffer 了,是 char 的數(shù)組,默認 32 個長度。
BufferedWriter
BufferedWriter 是一個緩沖的字符輸出流,為其他 Writer 提供緩沖的功能。
private void bufferedWriteDemo() throws IOException {
FileWriter fileWriter = new FileWriter("D:writer.txt", true);
try(BufferedWriter writer = new BufferedWriter(fileWriter)) {
writer.write(65);
writer.write(66);
}
fileWriter.close();
}
總結
介紹了幾種常用 Writer 輸出流的使用方式。FileWriter 用于寫入文件,BufferedWriter 自帶緩沖區(qū),StringWriter 和 CharArrayWriter 基于內存,OutputStreamWriter 將字符流轉為字節(jié)流。
-
接口
+關注
關注
33文章
9437瀏覽量
156065 -
JAVA
+關注
關注
20文章
2997瀏覽量
115601 -
參數(shù)
+關注
關注
11文章
1868瀏覽量
33747 -
字符
+關注
關注
0文章
237瀏覽量
26045 -
Writer
+關注
關注
0文章
8瀏覽量
7583
發(fā)布評論請先 登錄
Java中的輸入輸出流盤點
基于數(shù)據(jù)流的Java字節(jié)碼分析
java流與文件實驗
實例解析Java字符串內存管理方法
Java中一種字符串的內存管理方法
理解Java中字符流與字節(jié)流的區(qū)別
Java 字節(jié)流 字符流 轉換流
基礎:Java IO流學習總結
字符流和字節(jié)流有什么那區(qū)別
Java反射機制清空字符串導致業(yè)務異常分析
Java中如何判斷字符相等

java的字符流分析
評論