打印流
- 屬於輸出流
- 分爲PrintStream(字節打印流)和PrintWriter(字符打印流)
- 提供了一系列重載的print和println方法,用於多種數據類型的輸出
- PrintStream和PrintWriter的輸出不會拋出異常
- PrintStream和PrintWriter有自動flush功能
- System.out返回的是PrintStream的實例
實例
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File("D:\\IO\\text.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}//創建打印輸出流,設置爲自動刷新模式(寫入換行符或字節 '\n' 時都會刷新輸出緩衝區)
PrintStream ps = new PrintStream(fos,true);//字節型打印流 實例化
if (ps != null) { // 把標準輸出流(控制檯輸出)改成文件
System.setOut(ps);//形參爲打印字節流的對象}
for (int i = 0; i <= 255; i++) { //輸出ASCII字符
System.out.print((char)i);//對應的ASCII碼
if (i % 50 == 0) { //每50個數據一行
System.out.println(); // 換行
} }
ps.close();
- 創建字節型的打印流,緩衝流是手動刷新的,true表示自動刷新(flush)
- out是標準的輸出流,默認打印到控制檯上
- 默認控制檯輸出,重新設置位置,設置爲:輸出到打印流指定的文件中
數據流
- 數據流有兩個類,沒有對應的reader和writer,因爲不是文本的
- 分爲輸入型的數據流和輸出型的數據流
- 數據流處理的是基本數據類型,字符串和字節數組(8+2)
- 作用於節點流山,屬於處理流
數據流輸出
數據流輸入
- 若write讀取文件,輸入到控制檯上,呈現亂碼
- 正確做法:通過數據流的輸入讀取信息,打印到控制檯上
- 輸出時,採用輸出型數據流,相應地,輸入時,也應採用輸入型數據流,否則亂碼
- 錯誤:用write讀取基本數據類型
字符字節流練習
字節流輸出
- 通過字符串轉化爲字節數組,從而使用字節流輸出
- 未加flush(失誤)
字符流輸出
- 未加flush(失誤)
字符流輸入
- 打印到控制檯上,帶ln的print
- readLine與換行一定配對使用
- FileWriter(String fileName) 根據給定的文件名構造一個 FileWriter 對象
參數爲文件路徑
- 等效於new file,只是封裝到一起了,參數對應的還是一個file對象,本質上操作的是一個對象
字符流輸入輸出
- 下方代碼未處理異常,自行補充
- 輸出時,文件對象可不存在
- 若改成字節流輸入輸出,則三處改動(兩個類一個數組)
總結
- 字節流通過byte數組實現
- 字符流通過char數組或readLine【write(string)】實現
- 緩衝流輸出一定要flush
- 使用readline記得換行