1. 程式人生 > >Java基礎-IO流相關知識和用法

Java基礎-IO流相關知識和用法

IO流

分類:

1、流向

A:輸入流:讀取資料

B:輸出流:寫入資料

2、資料型別

A:位元組流

a:位元組輸入流 :讀取資料 (抽象類的基類:InputStream)

b:位元組輸出流 :寫入資料 (抽象類的基類:OutputStream)

B:字元流

a:字元輸入流 :讀取資料 (抽象類的基類:Reader)

b:字元輸出流 :寫入資料 (抽象類的基類:Writer)

一般情況下,如果沒有明確說明按那種型別分類,默

認情況下,按照資料型別來分。

在這裡插入圖片描述## 由於流物件是一個抽象類,不能被例項化,所以要找到一個具體的子類

每種型別的流,都是以父類名作為字尾

XXXInputStream

XXXOutputStream

XXXReader

XXXWriter

構造方法

XXXOutputStream(File file)

XXXOutputStream(String name)

。。。。。。。

建立位元組輸出流物件之後系統的執行步驟

1、呼叫系統功能去建立檔案

2、建立檔案輸出流物件

3、把物件指向這個檔案

位元組輸出流的操作步驟

1、建立位元組輸出流物件

2、寫資料

3、釋放資源

在這裡插入圖片描述

位元組流寫入資料的方法

public void writer(int b)

寫入一個位元組

public void writer(byte[] b)

寫入一個位元組陣列

public void writer(byte[] int off,int len)

寫入一個位元組陣列的一部分(int off表示從哪個下標開始寫入,int len表示從下標int off 開始 寫入陣列元素的個數)

在這裡插入圖片描述
在這裡插入圖片描述

如何實現資料的換行

1、寫入換行符(回車的轉義字元"\n")

2、針對不同的系統,換行的識別符號是不一樣的

windows :\r\n

linux: \n

MacOS: \r

3、一些高階記事本可以識別任意的換行符號

如何實現資料的追加寫入

構造方法第二個引數寫true即可

建立一個向指定檔案寫入資料的輸出檔案流,第二個引數為true,則將位元組寫入檔案末尾處。

FileOutputStream fos = new FileOutputStream(test2.txt,true);

在這裡插入圖片描述

在這裡插入圖片描述

對流對異常處理

在這裡插入圖片描述

位元組輸入流操作步驟(FileInputStream)

1、建立位元組輸入流物件

2、呼叫read()方法讀取資料,並把資料顯示在控制檯

3、釋放資源

位元組輸入流適合讀取一些沒有中文的檔案,如果要讀取有中文字元的檔案,用字元輸入流。

讀取資料對方法

1、int read() 讀取一個位元組

2、int read(byte[] b) 一次讀取一個位元組陣列

read()方法類似於迭代器中的next()的方法,讀完一個元素,讀取位置移動到下一個元素。

當讀取位置到達檔案末位是,則返回值為-1。

在這裡插入圖片描述

使用輸入輸出流複製文字檔案中的內容

資料來源

test.txt ---- 讀取資料 ---- FileInputStream

目的地

test2.txt ---- 寫資料 ---- FileOutputStream

將test.txt中的內容,複製到test.txt中

在這裡插入圖片描述

在計算機中,一個位元組用來表示符合和英文,兩個位元組用來表示中文,在執行過程中是如何識別把兩個位元組拼接在一起轉換為中文?

1、中文分為兩個位元組,第一個位元組肯定是負數。

2、第二個位元組常見的是負數,可能是正數,但是沒有影響

在這裡插入圖片描述

使用輸入輸出流複製檔案

需求:把某一目錄下的檔案,複製到另一個目錄

資料來源

Downloads資料夾下的 cosmos.jpg ---- 讀取資料 ---- FileInputStream

目的地

Documents 資料夾下 ---- 寫入資料 ---- FileOutputStream

在這裡插入圖片描述

使用int read(byte[] b)方法讀取,再用writer(byte[] b)複製寫入

在這裡插入圖片描述

使用輸入輸出流批量複製檔案

需求:找出目標目錄下的.mp4檔案和.avi檔案,.mov檔案,複製到指定的目錄中

在這裡插入圖片描述

在這裡插入圖片描述

位元組緩衝流

位元組流一次讀取一個位元組陣列的速度,明顯比一次讀寫一個位元組的速度快,這是加入了陣列這樣的緩衝區效果,Java在設計的時候也考慮到了這樣的設計思想(裝飾設計模式)提供了位元組緩衝區流

位元組緩衝輸出流

BufferedOutputStream

位元組緩衝輸入流

BufferedInputStream

構造方法可以指定緩衝區大小,一般用不上,預設的緩衝區大小基本夠用

位元組緩衝流,僅提供緩衝區,為高效而設計,真正的讀寫操作還是靠基本的流物件來實現的,所以位元組緩衝區流的構造方法,不能傳遞一個具體的檔案或者檔案路徑,而是傳遞一個OutputStream物件。

在這裡插入圖片描述

在這裡插入圖片描述

測試位元組流和快取流的效率比較(分別用兩種方式:讀寫位元組和讀寫位元組陣列)

將檔案 西門慶大戰多啦A夢.avi複製到指定目錄下

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述