上次聊到了 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) 兩個方法最終調(diào)用的還是 write(char cbuf[])
FileWriter
FileWriter 就是向文件中寫入字符流的 Writer。new FileWriter(fileName) 構(gòu)造函數(shù)是將文件從頭開始寫入并不是在文件結(jié)尾處繼續(xù)寫入。new FileWriter(fileName, true) 則是在文件結(jié)尾處寫入。
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")) {}
的方式關(guān)閉掉資源。
OutputStreamWriter
OutputStreamWriter 將輸出的字符流轉(zhuǎn)換為字節(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 內(nèi)部有一個 StringBuffer 對象作為其緩沖區(qū)。可以利用其緩沖區(qū)中的內(nèi)容來構(gòu)造字符串。
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 幾乎一樣,也是在內(nèi)存中構(gòu)造一個字符串緩沖區(qū)。不過底層不是一個 StringBuffer 了,是 char 的數(shù)組,默認(rèn) 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();
}
總結(jié)
介紹了幾種常用 Writer 輸出流的使用方式。FileWriter 用于寫入文件,BufferedWriter 自帶緩沖區(qū),StringWriter 和 CharArrayWriter 基于內(nèi)存,OutputStreamWriter 將字符流轉(zhuǎn)為字節(jié)流。
-
接口
+關(guān)注
關(guān)注
33文章
8617瀏覽量
151314 -
JAVA
+關(guān)注
關(guān)注
19文章
2970瀏覽量
104818 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1838瀏覽量
32270 -
字符
+關(guān)注
關(guān)注
0文章
233瀏覽量
25222 -
Writer
+關(guān)注
關(guān)注
0文章
8瀏覽量
7334
發(fā)布評論請先 登錄
相關(guān)推薦
評論