编程体系结构(04):JavaIO流文件管理
本文源碼:GitHub·點這里 || GitEE·點這里
一、IO流分類
1、分類角度
流的方向
- 輸入流:從數(shù)據(jù)源中讀取數(shù)據(jù)到應用中的流;
- 輸出流:從應用中將數(shù)據(jù)寫入到目的地的流;
流數(shù)據(jù)類型
- 字節(jié)流:以字節(jié)形式來讀寫的流,標識是名稱以Stream結(jié)尾;
- 字符流:以字符形式來讀寫的流,標識是名稱以Writer、Reader結(jié)尾;
- 管道流:以數(shù)據(jù)塊為單位來處理,緩沖區(qū)就是用于讀寫的數(shù)據(jù)塊;
流的角色
- 節(jié)點流:可以從一個節(jié)點或者向一個節(jié)點讀/寫數(shù)據(jù)的流,也被稱為低級流;
- 處理流:對存在的流進行連接或者封裝、封裝后的流來進行讀/寫、也被稱為高級流。
2、API體系
5個核心類ObjectOutputStream:File、OutputStream、InputStream、Writer、Reader;
1關鍵接口:Serializable;
二、API細節(jié)分類
1、字節(jié)輸入流
InputStream:字節(jié)輸入流是所有字節(jié)輸入流的父類、為所有字節(jié)輸入流提供一個標準、和基本的與讀取字節(jié)有關的方法及簡單的實現(xiàn)。
FileInputStream:文件字節(jié)輸入流以字節(jié)的形式將文件中數(shù)據(jù)讀取到應用中;
BufferedInputStream:緩沖字節(jié)輸入流,提供緩沖功能,提高效率;
ByteArrayInputStream:字節(jié)數(shù)組輸入流用于讀取其內(nèi)置緩存字節(jié)數(shù)組中的字節(jié);
PipedInputStream:管道字節(jié)輸入流必須與PipedOutputStream結(jié)合使用,用于線程之間的通信;
FilterInputStream:過濾器字節(jié)輸入流,重寫InputStream方法,為字節(jié)輸入處理流提供擴展;
DataInputStream:數(shù)據(jù)字節(jié)輸入流,一般與DataOutputStream結(jié)合使用;
ObjectInputStream:對象字節(jié)輸入流,與ObjectOutputStream結(jié)合使用;
2、字節(jié)輸出流
OutputStream:字節(jié)輸出流,InputStream作用一樣,為所有字節(jié)輸出流提供一個標準、定義了一些基本輸出字節(jié)的方法與簡單實現(xiàn);
FileOutputStream:文件字節(jié)輸出流,將字節(jié)寫入指定目標的文件源中;
BufferedOutputStream:緩沖字節(jié)輸出流,提供緩沖功能、提高效率;
ByteArrayOutputStream:字節(jié)數(shù)組輸出流,將字節(jié)寫入到其本身所帶的一個內(nèi)置緩存字節(jié)數(shù)組中;
PipedoutputStream:管道字節(jié)輸出流,必須與PipedInputStream結(jié)合使用、用于線程之間的通信;
FilterOutputStream:過濾字節(jié)輸出流,為字節(jié)輸出處理流提供擴展;
DataOutputStream: 數(shù)據(jù)字節(jié)輸出流,一般與DataInputStream結(jié)合使用;
ObjectOutputStream:對象字節(jié)輸出流,通常與ObjectInputStream結(jié)合使用;
PrintStream:字節(jié)打印流,字節(jié)輸出流進行裝飾、提供打印各種數(shù)據(jù)類型的功能;
3、字符輸入流
Reader:字符輸入流,為所有字符輸入流提供一個標準、只有基本的讀取方法的定義和簡單的實現(xiàn);
InputStreamReader:字節(jié)轉(zhuǎn)換流,將字節(jié)流轉(zhuǎn)換成字符流,并且可以指定字節(jié)轉(zhuǎn)成字符時使用的編碼;
BufferedReader:緩沖字符輸入流,為字符輸入流提供緩沖功能、提高效率;
CharArrayReader:字符數(shù)組輸入流,將其內(nèi)置字符緩存數(shù)組中的數(shù)據(jù)讀取到應用中;
PipedReader:管道字符輸入流,與PipedWriter結(jié)合使用、用于線程之間的通信;
FilterReader:過濾字符輸入流,為字符輸入流提供擴展;
FileReader:文件字符輸入流,字符的形式讀取文件中的內(nèi)容;
4、字符輸出流
Writer:字符輸出流,所有字符輸出流提供一個標準,基本寫入的方法和簡單的實現(xiàn);
OutputStreamWriter:字節(jié)輸出轉(zhuǎn)換流,用于將字節(jié)輸出流轉(zhuǎn)化成字符輸出流。可以指定編碼轉(zhuǎn)化;
BufferedWriter:緩存字符輸出流,提供緩沖功能、提高效率;
CharArrayWriter:字符輸出流,用于將字符寫入其內(nèi)置緩存字符數(shù)組中;
PipedWriter:管道字符輸出流,與PipedReader結(jié)合使用,用于線程之間的通信;
FileWriter:文件字符輸出流,用于將字符寫入到指定文件中;
PrintWriter:字符打印流,將各種數(shù)據(jù)以字符的形式打印;
三、File文件類
1、構造方法
File(String pathname):指定文件或者文件夾的路徑創(chuàng)建一個File文件;
File(File parent,String child):根據(jù)parent抽象路徑名和child路徑名字符創(chuàng)建新的File實例;
2、路徑問題
絕對路徑:該文件在硬盤上的完整路徑。絕對路徑一般都是以盤符開頭的。
相對路徑: 相對路徑就是資源文件相對于當前程序所在的路徑。
. 當前路徑
… 上一級路徑
3、文件的創(chuàng)建
createNewFile():在指定位置創(chuàng)建一個空文件,成功返回true,已存在就不創(chuàng)建然后返回false;
mkdir():在指定位置創(chuàng)建目錄,這只會創(chuàng)建最后一級目錄,上級目錄不存在就拋異常;
mkdirs():在指定位置創(chuàng)建目錄,這會創(chuàng)建路徑中所有不存在的目錄;
4、刪除文件
delete() 刪除文件或者一個空的文件夾,如果文件夾且不為空,則不能刪除,成功返回true,失敗返回false;
5、判斷方法
exists():文件或文件夾是否存在;
isFile():是否是一個文件,如果不存在,則始終為false;
isDirectory():是否是一個目錄,如果不存在,則始終是false;
6、獲取文件信息
getName():獲取文件或文件夾名稱,不包含上級路徑;
getPath():返回絕對路徑,可以是相對路徑,但是目錄要指定
四、編碼解碼
字節(jié)流讀取的是文件中的二進制數(shù)據(jù),不會自動轉(zhuǎn)為可以看懂的字符;字符流:把讀到的數(shù)據(jù)進行對應的編碼與解碼。
五、源代碼地址
GitHub·地址 https://github.com/cicadasmile GitEE·地址 https://gitee.com/cicadasmile推薦閱讀:編程體系整理
| 01 | Java描述設計模式,算法,數(shù)據(jù)結(jié)構 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 02 | Java基礎、并發(fā)、面向?qū)ο蟆eb開發(fā) | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 03 | SpringCloud微服務基礎組件案例詳解 | GitHub·點這里 | GitEE·點這里 | ☆☆☆ |
| 04 | SpringCloud微服務架構實戰(zhàn)綜合案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基礎應用入門到進階 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合開發(fā)常用中間件 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 07 | 數(shù)據(jù)管理、分布式、架構設計基礎案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 08 | 大數(shù)據(jù)系列、存儲、組件、計算等框架 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
總結(jié)
以上是生活随笔為你收集整理的编程体系结构(04):JavaIO流文件管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以太信道
- 下一篇: Java描述设计模式(09):装饰模式