java程式設計之——IO流應用總結
------- android培訓、java培訓、期待與您交流! ---------
IO流(掌握)
(1)IO流的分類:
A:位元組流
位元組輸入流 InputStream
位元組輸出流 OutputStream
B:字元流
字元輸入流 Reader
字元輸出流 Writer
(2)FileWriter寫入資料
步驟:
A:建立字元輸出流物件
B:呼叫寫入資料方法,並重新整理緩衝區
C:釋放資源
程式碼體現:
FileWriter fw = new FileWriter("a.txt"); fw.write("hello,io"); fw.flush(); fw.close();
問題?
A:建立字元輸出流物件做了幾件事情?
1 呼叫系統功能建立了檔案
2 建立字元輸出流物件
3 把字元輸出流物件指向建立的檔案
B:寫資料完畢後,為什麼要重新整理?
C:為什麼要close()?
D:flush()和close()的區別?
E:怎麼實現資料換行?
F:怎麼實現資料追加寫入?
(3)FileReader讀取資料
步驟:
A:建立字元輸入流物件
B:呼叫讀取資料方法,並顯示
C:釋放資源
程式碼體現: FileReader fr = new FileReader("a.txt"); //方式1 //一次讀取一個字元 int ch = 0; while((ch=fr.read())!=-1) { System.out.print((char)ch); } //方式2 //一次讀取一個字元陣列 char[] chs = new char[1024]; int len = 0; while((len=fr.read(chs))!=-1) { System.out.print(new String(chs,0,len)); } fr.close();
(4)案例:
複製文字檔案。
1:IO流
(1)分類
位元組流:
輸入流:
InputStream
int read()
int read(byte[] bys)
FileInputStream
BufferedInputStream
輸出流:
OutputStream
write(int by)
write(byte[] bys,int index,int len)
FileOutputStream
BufferedOutputStream
字元流:
輸入流:
Reader
int read()
int read(char[] chs)
FileReader
BufferedReader
String readLine()
輸出流:
Writer
write(int ch)
write(char[] chs,int index,int len)
FileWriter
BufferedWriter
write(String line)
void newLine()
(2)到底使用誰?
用記事本開啟能讀懂的,就用字元流。
否則,用位元組流。
如果你根本就不知道,用位元組流。
(3)複製文字檔案:
9種方式:
位元組流:
4種
基本流一次讀寫一個位元組
基本流一次讀寫一個位元組陣列
高效流一次讀寫一個位元組
高效流一次讀寫一個位元組陣列
字元流:
5種
基本流一次讀寫一個字元
基本流一次讀寫一個字元陣列
高效流一次讀寫一個字元
高效流一次讀寫一個字元陣列
高效流一次讀寫一個字串
一般來說,明明知道是文字檔案,那麼,肯定不用位元組流。
那麼,如果是使用字元流,有5種方式,選擇哪一種呢?
一般都選擇高效流讀寫一個字串的方式。
程式碼體現:
資料來源:c:\\a.txt
目的地:d:\\b.txt
BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\b.txt"));
String line = null;
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
(4)複製二進位制流資料:(圖片,視訊,音訊等)
位元組流:
4種
基本流一次讀寫一個位元組
基本流一次讀寫一個位元組陣列
高效流一次讀寫一個位元組
高效流一次讀寫一個位元組陣列
一般來說,我們選擇使用高效流一次讀寫一個位元組陣列
程式碼體現:
資料來源:c:\\a.jpg
目的地:d:\\b.jpg
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:\\a.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:\\b.jpg"));
byte[] bys = new byte[1025];
int len = 0;
while((len=bis.read(bys))!=-1)
{
bos.write(bys,0,len);
}
bos.close();
bis.close();
1:轉換流(理解)
(1)如果有位元組流物件,為了使用字元流的功能,就必須使用轉換流進行操作。
案例:
鍵盤錄入資料
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferddWriter bw = new BufferedWriter(new FileWriter("a.txt"));
String line = null
while((line=br.readLine())!=null)
{
if("over".equals(line))
{
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
把文字檔案的資料通過流物件在控制檯顯示
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferddWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line = null
while((line=br.readLine())!=null)
{
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();
2:列印流(掌握)
(1)列印流是寫資料的。
(2)特點:
A:可以寫任意資料型別的資料
B:如果啟動了自動重新整理,能自動重新整理,還會換行。println()
C:可以直接往檔案寫資料
注意:哪些流物件可以直接讀寫檔案?
看構造方法,如果同時有String和File的構造引數,那麼該流物件就可以讀寫檔案。
(3)用列印流改進複製文字檔案的操作
資料來源:
c:\\a.txt
目的地:
d:\\b.txt
BufferedReader br = new BufferedReader(new FileReader("c:\\a.txt"));
PrintWriter pw = new PrintWriter(new FileWriter("d:\\b.txt"),true);
String line = null;
while((line=br.readLine())!=null)
{
pw.println(line);
}
pw.close();
br.close();
3:序列化流(理解)
(1)序列化:把物件按照流一樣的方式在網路中傳輸,或者儲存到文字檔案
反序列化:把流資料還原成物件
(2)如何實現序列化?
A:被序列化的物件所屬的類必須實現序列化介面
B:用序列化流物件進行操作
(3)序列化(物件)流物件
ObjectInputStream:
Object readObject()
ObjectOutputStream:
void writeObject(Object obj)
(4)掌握:
A:看到類實現了序列化介面,就知道該類可以被序列化流物件操作
B:看到類實現了序列化介面,知道點選滑鼠就可以解決黃色警告問題
4:Properties(理解)
(1)是Map體系一個集合類。
(2)特點:
A:可以把集合中的資料儲存到文字檔案,也可以把文字檔案的資料載入到集合中。
B:該集合的鍵和值都是String型別
(3)特殊功能:
A:setProperty(String key,String value)
B:getProperty(String key)
getProperty(String key,String defaultValue)
C:Set<String> stringPropertyNames()
(4)和IO流結合的方法:
A:list 通過列印流把資料儲存到檔案中
B:load 通過任意流把文字中的資料載入到集合中
C:store 通過任意流把資料儲存到檔案中
(5)案例:
查詢檔案中是否有鍵為lisi的,如果有,則修改其值為50