在本教程中,我們將借助示例學(xué)習(xí)Java OutputStreamWriter及其方法。
java.io包的OutputStreamWriter類可用于將字符形式的數(shù)據(jù)轉(zhuǎn)換為字節(jié)形式的數(shù)據(jù)。
它繼承了抽象類Writer。
OutputStreamWriter類可與其他輸出流一起使用。 它也被稱為字節(jié)流和字符流之間的橋梁。 這是因?yàn)镺utputStreamWriter會(huì)將其字符轉(zhuǎn)換為字節(jié)。
例如,某些字符需要2個(gè)字節(jié)存儲(chǔ)在存儲(chǔ)器中。要寫入此類數(shù)據(jù),我們可以使用輸出流寫入器,該輸出流寫入器將字符轉(zhuǎn)換為相應(yīng)的字節(jié)并將字節(jié)存儲(chǔ)在一起。
為了創(chuàng)建OutputStreamWriter,我們必須先導(dǎo)入java.io.OutputStreamWriter包。導(dǎo)入包后,就可以在這里創(chuàng)建輸出流寫入器。
//創(chuàng)建一個(gè)OutputStream FileOutputStream file = new FileOutputStream(String path); //創(chuàng)建一個(gè)OutputStreamWriter OutputStreamWriter output = new OutputStreamWriter(file);
在以上示例中,我們創(chuàng)建了一個(gè)名為output的OutputStreamWriter以及一個(gè)名為FileOutputStream的文件。
在這里,我們使用默認(rèn)的字符編碼將字符寫入輸出流。
但是,我們可以指定用于寫入數(shù)據(jù)的字符編碼類型(UTF8或UTF16)。
//創(chuàng)建一個(gè)OutputStreamWriter,指定字符編碼 OutputStreamWriter output = new OutputStreamWriter(file, Charset cs);
在這里,我們使用Charset該類來指定字符編碼的類型。
OutputStreamWriter類為Writer類中出現(xiàn)的不同方法提供了實(shí)現(xiàn)。
write() -向?qū)懭肫鲗懸粋€(gè)字符
write(char[] array) - 將指定數(shù)組中的字符寫入寫入器
write(String data) - 將指定的字符串寫入寫入器
import java.io.FileOutputStream; import java.io.OutputStreamWriter; public class Main { public static void main(String args[]) { String data = "This is a line of text inside the file."; try { // 創(chuàng)建 FileOutputStream FileOutputStream file = new FileOutputStream("output.txt"); //創(chuàng)建一個(gè)OutputStreamWriter OutputStreamWriter output = new OutputStreamWriter(file); //將字符串寫入文件 output.write(data); //關(guān)閉 writer output.close(); } catch (Exception e) { e.getStackTrace(); } } }
在上面的示例中,我們使用文件輸出流創(chuàng)建了一個(gè)輸出流讀取器。輸出流閱讀器與output.txt文件鏈接。
FileOutputStream file = new FileOutputStream("output.txt"); OutputStreamWriter output = new OutputStreamWriter(file);
要將數(shù)據(jù)寫入文件,我們使用了write()方法。
在這里,當(dāng)我們運(yùn)行程序時(shí),output.txt文件將填充以下內(nèi)容。
This is a line of text inside the file.
getEncoding()方法可用于獲取用于將數(shù)據(jù)寫入輸出流的編碼類型。例如,
import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.io.FileOutputStream; class Main { public static void main(String[] args) { try { // 創(chuàng)建一個(gè)輸出流 FileOutputStream file = new FileOutputStream("output.txt"); // 創(chuàng)建具有默認(rèn)編碼的輸出流閱讀器 OutputStreamWriter output1 = new OutputStreamWriter(file); // 創(chuàng)建指定編碼的輸出流閱讀器 OutputStreamWriter output2 = new OutputStreamWriter(file, Charset.forName("UTF8")); // 返回輸出流的字符編碼 System.out.println("output1的字符編碼: " + output1.getEncoding()); System.out.println("output2的字符編碼: " + output2.getEncoding()); // 關(guān)閉 reader output1.close(); output2.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
output1的字符編碼: Cp1252 output2的字符編碼: UTF8
在上面的示例中,我們創(chuàng)建了2個(gè)輸出流寫入器,分別名為output1和output2。
output1沒有指定字符編碼。因此,getEncoding()方法返回默認(rèn)字符編碼。
output2指定字符編碼UTF8。因此,getEncoding()方法返回指定的字符編碼。
注意:我們已經(jīng)使用Charset.forName()方法指定字符編碼的類型。
要關(guān)閉輸出流編寫器,我們可以使用close()方法。一旦調(diào)用了close()方法,就不能使用writer寫入數(shù)據(jù)。
方法 | 描述 |
---|---|
flush() | 強(qiáng)制將寫入器中存在的所有數(shù)據(jù)寫入相應(yīng)的目的地 |
append() | 將指定字符插入當(dāng)前編寫器 |