程式設計體系結構(04):JavaIO流檔案管理
阿新 • • 發佈:2020-09-28
本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile) || [GitEE·點這裡](https://gitee.com/cicadasmile)
# 一、IO流分類
**1、分類角度**
**流的方向**
- 輸入流:從資料來源中讀取資料到應用中的流;
- 輸出流:從應用中將資料寫入到目的地的流;
**流資料型別**
- 位元組流:以位元組形式來讀寫的流,標識是名稱以Stream結尾;
- 字元流:以字元形式來讀寫的流,標識是名稱以Writer、Reader結尾;
- 管道流:以資料塊為單位來處理,緩衝區就是用於讀寫的資料塊;
**流的角色**
- 節點流:可以從一個節點或者向一個節點讀/寫資料的流,也被稱為低階流;
- 處理流:對存在的流進行連線或者封裝、封裝後的流來進行讀/寫、也被稱為高階流。
**2、API體系**
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162846262-1616917417.png)
5個核心類ObjectOutputStream:File、OutputStream、InputStream、Writer、Reader;
1關鍵介面:Serializable;
# 二、API細節分類
**1、位元組輸入流**
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162834494-241006326.png)
**InputStream**:位元組輸入流是所有位元組輸入流的父類、為所有位元組輸入流提供一個標準、和基本的與讀取位元組有關的方法及簡單的實現。
**FileInputStream**:檔案位元組輸入流以位元組的形式將檔案中資料讀取到應用中;
**BufferedInputStream**:緩衝位元組輸入流,提供緩衝功能,提高效率;
**ByteArrayInputStream**:位元組陣列輸入流用於讀取其內建快取位元組陣列中的位元組;
**PipedInputStream**:管道位元組輸入流必須與PipedOutputStream結合使用,用於執行緒之間的通訊;
**FilterInputStream**:過濾器位元組輸入流,重寫InputStream方法,為位元組輸入處理流提供擴充套件;
**DataInputStream**:資料位元組輸入流,一般與DataOutputStream結合使用;
**ObjectInputStream**:物件位元組輸入流,與ObjectOutputStream結合使用;
**2、位元組輸出流**
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162823040-116826530.png)
**OutputStream**:位元組輸出流,InputStream作用一樣,為所有位元組輸出流提供一個標準、定義了一些基本輸出位元組的方法與簡單實現;
**FileOutputStream**:檔案位元組輸出流,將位元組寫入指定目標的檔案源中;
**BufferedOutputStream**:緩衝位元組輸出流,提供緩衝功能、提高效率;
**ByteArrayOutputStream**:位元組陣列輸出流,將位元組寫入到其本身所帶的一個內建快取位元組陣列中;
**PipedoutputStream**:管道位元組輸出流,必須與PipedInputStream結合使用、用於執行緒之間的通訊;
**FilterOutputStream**:過濾位元組輸出流,為位元組輸出處理流提供擴充套件;
**DataOutputStream**: 資料位元組輸出流,一般與DataInputStream結合使用;
**ObjectOutputStream**:物件位元組輸出流,通常與ObjectInputStream結合使用;
**PrintStream**:位元組列印流,位元組輸出流進行裝飾、提供列印各種資料型別的功能;
**3、字元輸入流**
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162810075-297599423.png)
**Reader**:字元輸入流,為所有字元輸入流提供一個標準、只有基本的讀取方法的定義和簡單的實現;
**InputStreamReader**:位元組轉換流,將位元組流轉換成字元流,並且可以指定位元組轉成字元時使用的編碼;
**BufferedReader**:緩衝字元輸入流,為字元輸入流提供緩衝功能、提高效率;
**CharArrayReader**:字元陣列輸入流,將其內建字元快取陣列中的資料讀取到應用中;
**PipedReader**:管道字元輸入流,與PipedWriter結合使用、用於執行緒之間的通訊;
**FilterReader**:過濾字元輸入流,為字元輸入流提供擴充套件;
**FileReader**:檔案字元輸入流,字元的形式讀取檔案中的內容;
**4、字元輸出流**
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162757285-974451798.png)
**Writer**:字元輸出流,所有字元輸出流提供一個標準,基本寫入的方法和簡單的實現;
**OutputStreamWriter**:位元組輸出轉換流,用於將位元組輸出流轉化成字元輸出流。可以指定編碼轉化;
**BufferedWriter**:快取字元輸出流,提供緩衝功能、提高效率;
**CharArrayWriter**:字元輸出流,用於將字元寫入其內建快取字元陣列中;
**PipedWriter**:管道字元輸出流,與PipedReader結合使用,用於執行緒之間的通訊;
**FileWriter**:檔案字元輸出流,用於將字元寫入到指定檔案中;
**PrintWriter**:字元列印流,將各種資料以字元的形式列印;
# 三、File檔案類
**1、構造方法**
File(String pathname):指定檔案或者資料夾的路徑建立一個File檔案;
File(File parent,String child):根據parent抽象路徑名和child路徑名字元建立新的File例項;
**2、路徑問題**
絕對路徑:該檔案在硬碟上的完整路徑。絕對路徑一般都是以碟符開頭的。
相對路徑: 相對路徑就是資原始檔相對於當前程式所在的路徑。
. 當前路徑
.. 上一級路徑
**3、檔案的建立**
createNewFile():在指定位置建立一個空檔案,成功返回true,已存在就不建立然後返回false;
mkdir():在指定位置建立目錄,這隻會建立最後一級目錄,上級目錄不存在就拋異常;
mkdirs():在指定位置建立目錄,這會建立路徑中所有不存在的目錄;
**4、刪除檔案**
delete() 刪除檔案或者一個空的資料夾,如果資料夾且不為空,則不能刪除,成功返回true,失敗返回false;
**5、判斷方法**
exists():檔案或資料夾是否存在;
isFile():是否是一個檔案,如果不存在,則始終為false;
isDirectory():是否是一個目錄,如果不存在,則始終是false;
**6、獲取檔案資訊**
getName():獲取檔案或資料夾名稱,不包含上級路徑;
getPath():返回絕對路徑,可以是相對路徑,但是目錄要指定
# 四、編碼解碼
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162733169-674346033.png)
![](https://img2020.cnblogs.com/blog/1691717/202009/1691717-20200928162741787-2092954341.png)
位元組流讀取的是檔案中的二進位制資料,不會自動轉為可以看懂的字元;字元流:把讀到的資料進行對應的編碼與解碼。
# 五、原始碼地址
```
GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile
```
**推薦閱讀:程式設計體系整理**
|序號|專案名稱|GitHub地址|GitEE地址|推薦指數|
|:---|:---|:---|:---|:---|
|01|Java描述設計模式,演算法,資料結構|[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆|
|02|Java基礎、併發、面向物件、Web開發|[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆|
|03|SpringCloud微服務基礎元件案例詳解|[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆|
|04|SpringCloud微服務架構實戰綜合案例|[GitHub·點這裡](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·點這裡](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆|
|05|SpringBoot框架基礎應用入門到進階|[GitHub·點這裡](https://github.com/cicadasmile/spring-boot-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆|
|06|SpringBoot框架整合開發常用中介軟體|[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆|
|07|資料管理、分散式、架構設計基礎案例|[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent)|☆☆☆☆☆|
|08|大資料系列、儲存、元件、計算等框架|[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent)|☆☆☆☆☆