1、簡介
2、異同:看完簡介,你是否以爲PrintStream與DataOutStream有幾分類似!
與DataOutStream
的異同java
2.1 相同點程序員
FileOutputStream
,用於包裝其它輸出流。2.2 不一樣點:數組
2.2.1 編碼方面:函數
2.2.2 異常處理機制方面:編碼
2.2.3 構造函數方面:code
DataOutputStream(OutputStream out)
。即它只支持以輸出流out做爲「DataOutputStream的輸出流」2.2.4 目的方面:對象
與PrintWriter
的異同繼承
相同點:字符串
區別:源碼
輸出字符時的編碼方面
PrintWriter能夠在傳入Writer對象參數時,可由程序員指定字符轉換爲字節時的編碼格式,這樣兼容性和可控性會更好。
OutputStreamWriter(OutputStream ops / Writer w, Charset cs);
所屬體系方面
PrintStream屬於字節流體系,PrintWriter繼承於Writer,屬於字符流體系中
3、PrintStream的用法:(將字母「abcde」寫入到文件「data.txt」)
一、數據從流寫到文件**過程
二、數據從文件到流的過程
print(Object obj)
重載方法都經過將對應數據先轉換成字符串, 而後調用write()方法寫到底層輸出流中.常見用到PrintStream流對象 System.out就被包裝成PrintStream流,System.err也是。3.一、PrintStream (OutputStream out)
final byte[] arr = {0x61, 0x62, 0x63, 0x64, 0x65 }; //abced File file = new File("file.txt"); // 建立文件「file.txt」的File對象 PrintStream out = new PrintStream( // 建立文件對應FileOutputStream new FileOutputStream(file)); out.write(arr); // 將「字節數組arr」所有寫入到輸出流中 out.close(); // 關閉輸出流
3.二、PrintStream (File file)
final byte[] arr = {0x61, 0x62, 0x63, 0x64, 0x65 }; PrintStream out = new PrintStream ("data.txt"); out.write(arr); out.close();
3.三、PrintStream (OutputStream out)
final byte[] arr = {0x61, 0x62, 0x63, 0x64, 0x65 }; File file = new File("data.txt"); //建立文件「data.txt」的File對象 PrintStream out = new PrintStream( //建立文件對應FileOutputStream new FileOutputStream(file)); out.write(arr); // 將「字節數組arr」所有寫入到輸出流中 out.close(); // 關閉輸出流
3.四、write(), print(), println(), printf()
PrintStream pS = new PrintStream("other.txt"); pS.println("hello PrintStream"); pS.write(0x41); pS.print(0x41); String str = "CDE"; pS.printf("%s\n", str); 文件內容以下: hello PrintStream A65BCDE
附:爲何是有A65出現?write() 、以及print()重載版本之一的源碼以下
write(int oneByte) 對於write(0x41): ---- 0x41的ACCII碼對應 A, public void print(int i) { write(String.valueOf(i)); } pS.print(0x41); == pS.write(String.valueOf(Ox41)); String.valueOf(65) --> "65";
4、PrintWriter的用法
構造函數 PrintWriter(OutputStream out / Writer w, boolean autoflush);
-----所以在傳入Writer時,能夠配合轉換流 OutputStreamWriter(OutputStream ops, Charset cs);
設定字符集
PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(System.out, "GB2312")); //System.out是OutputStream一的對象