使用字節流會出現的問題:
遇到中文字符是,可能不會顯示完整的字符。
解決這個問題就用到的是字符流,字符流專門處理文本文件。
GBK和UTF-8:
GBK:主要用於中文編碼,長度佔2個字節
UTF-8:包含全世界用到的字符,會佔用更多的數據庫存儲空間,長度佔3個字節
一、字節輸出流-OutputStream
抽象類,字節輸出流所有的超類
基本共性功能方法:
子類:File Out out stream(文件字節輸出流)
作用:把內存中的數據寫入到硬盤文件中
構造方法:
FileOutputstream(String name)創建一個向具有指定名稱的文件中寫入數據的輸出文件流。
FileOutputstream(File file)創建一個指定File對象表示的文件中寫入如數據的文件輸出流。
寫入數據的原理
(內存->硬盤):java程序-JVM(虛擬機)-OS(操作系統)-OS調用寫數據的方法-把數據寫到文件中
練習:一次寫一個字節,流的使用步驟
步驟一:
創建一個FileOutputStream對象
FileOutputStream fos = new File OutputStream(name:“寫入的目的地”);
步驟二:
調用共性功能方法write,把數據寫到文件中
fos.write(b:49);//49表示1,一次就放進一個1
步驟三:
寫入後要釋放資源(流使用會佔用一定的內存,使用完畢清空,提供程序效率)使用close
fos.close();
練習:一次寫入多個字節
步驟一:
創建一個對象
FileOutputStream fos = new File OutputStream(name:“相對/絕對路徑\\文件名”);
步驟二:
寫一個數組,再把數組傳進去
Byte[] bytes = {65,66,67,68};//查詢ASCII碼,得ABCD
fos.write(bytes);
步驟三:
釋放
fos.close();
續寫和換行:
續寫
使用兩個參數的構造方法:
FileOutputStream(String name,boolean append)//name是寫入的目的地;
append追加寫開關,有true和false。
true不會覆蓋源文件,繼續在文件末尾追加寫數據;
false創建新文件,覆蓋;
換行
Windows:\r\n
Linux:\n
Mac:\r
例子:
二、字節輸入流-InputStream
子類:FileInputstream(文件字節輸入流)
作用:把硬盤文件的數據,讀取到內存中使用
構造方法:
FileInputstream(String name);Srting name 文件路徑
FileInputstream(File file);文件
構造方法的作用:
創建FileInputstream對象,把對象指定方法讀取文件
讀取數據的原理:
(硬盤->內存):java程序-JVM-OS-OS讀取數據的方法-讀取文件
練習:一次讀取一個
步驟一:
創建一個對象
FileInputStream fis = new FileInputStream(name:“要讀取的路徑”);
步驟二:
把FileInputStream對象指定構造方法中要讀取的文件
Int len = fis.read();//讀取要有返回值
System.out.println(len);//輸出
步驟三:
關閉釋放資源
fis.close();
練習:一次讀取多個
步驟一:
創建一個對象
步驟二:
把FileInputStream對象指定構造方法中要讀取的文件
Byte[] bytes = new byte[2];//定義一個數組,長度爲兩位
Int len = fis.read(bytes);
System.out.prinln(Arrays.toString(bytes));
步驟三:
關閉釋放資源