1. 程式人生 > >java程式設計之——IO流應用總結

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:建立字元輸出流物件做了幾件事情?

呼叫系統功能建立了檔案

建立字元輸出流物件

把字元輸出流物件指向建立的檔案

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)案例:

複製文字檔案。

1IO

(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:可以直接往檔案寫資料

注意:哪些流物件可以直接讀寫檔案?

看構造方法,如果同時有StringFile的構造引數,那麼該流物件就可以讀寫檔案。

(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:看到類實現了序列化介面,知道點選滑鼠就可以解決黃色警告問題

4Properties(理解)

(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