上次聊到了 java 的字符流 Reader,今天來(lái)看看它的好朋友 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) 兩個(gè)方法最終調(diào)用的還是 write(char cbuf[])
FileWriter
FileWriter 就是向文件中寫(xiě)入字符流的 Writer。new FileWriter(fileName) 構(gòu)造函數(shù)是將文件從頭開(kāi)始寫(xiě)入并不是在文件結(jié)尾處繼續(xù)寫(xiě)入。new FileWriter(fileName, true) 則是在文件結(jié)尾處寫(xiě)入。
private void fileWriteDemo() throws IOException {
Writer writer = new FileWriter("D:writer.txt");
writer.write("測(cè)試寫(xiě)入".toCharArray());
writer.close();
}
Writer 實(shí)現(xiàn)了 Closeable 接口,可以用 try(Writer writer = new FileWriter("D:writer.txt")) {}
的方式關(guān)閉掉資源。
OutputStreamWriter
OutputStreamWriter 將輸出的字符流轉(zhuǎn)換為字節(jié)流??梢允褂弥付ǖ木幋a字符集。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)部有一個(gè) StringBuffer 對(duì)象作為其緩沖區(qū)??梢岳闷渚彌_區(qū)中的內(nèi)容來(lái)構(gòu)造字符串。
private void stringWriteDemo() throws IOException {
String str = "寫(xiě)入測(cè)試";
try(StringWriter writer = new StringWriter()) {
writer.write(str);
writer.write(str);
System.out.println(writer.getBuffer().toString());
}
}
CharArrayWriter 和 StringWriter 幾乎一樣,也是在內(nèi)存中構(gòu)造一個(gè)字符串緩沖區(qū)。不過(guò)底層不是一個(gè) StringBuffer 了,是 char 的數(shù)組,默認(rèn) 32 個(gè)長(zhǎng)度。
BufferedWriter
BufferedWriter 是一個(gè)緩沖的字符輸出流,為其他 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 用于寫(xiě)入文件,BufferedWriter 自帶緩沖區(qū),StringWriter 和 CharArrayWriter 基于內(nèi)存,OutputStreamWriter 將字符流轉(zhuǎn)為字節(jié)流。
-
接口
+關(guān)注
關(guān)注
33文章
8254瀏覽量
149945 -
JAVA
+關(guān)注
關(guān)注
19文章
2943瀏覽量
104089 -
參數(shù)
+關(guān)注
關(guān)注
11文章
1657瀏覽量
31874 -
字符
+關(guān)注
關(guān)注
0文章
230瀏覽量
25105 -
Writer
+關(guān)注
關(guān)注
0文章
8瀏覽量
7285
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論