IO流
Input:輸入流,用于讀取數(shù)據(jù)
Output:輸出流,用于寫數(shù)據(jù)
IO分類
字節(jié)流
字節(jié)流就是讀和取都是以字節(jié)【byte】為單位
InputStream【抽象類
FileInputStream【文件輸入流】
案例:讀取一個txt文件數(shù)據(jù)
BufferedInputStream【帶緩沖區(qū)的輸入流】
SequenceInputStream【系列流,可以把多個字節(jié)流封裝到系列流,方便讀】
ObjectInputStream【對象輸入流,讀取對象,讀的對象必須實現(xiàn)Serializable系列化接口】
DataInputStream【數(shù)據(jù)輸出流,這個可以按int,long的字節(jié)數(shù)來讀取】
OutputStream【抽象類】
FileOutputStream【文件輸出流】
案例:往一個abc.txt文件寫數(shù)據(jù)
BufferedOutputStream【帶緩沖區(qū)的輸出流】
ByteArrayOutputStream【字節(jié)數(shù)據(jù)輸出流,這個不需要關(guān)聯(lián)文件,不需要關(guān)流,這個類把數(shù)據(jù)寫在內(nèi)存,不是在寫文件】
ObjectOutputStream【對象輸出流,寫入對象到文件,寫的對象必須實現(xiàn)Serializable系列化接口】
DataOutputStream【數(shù)據(jù)輸出流,這個可以按int,long的字節(jié)數(shù)來存儲】
PrintStream【打印字節(jié)流,把數(shù)據(jù)打印在控制臺console】【System.out,把字節(jié)轉(zhuǎn)成字符串】
案例:拷貝圖片和音頻
字節(jié)數(shù)組拷貝之a(chǎn)vailable()方法
案例:正確的拷貝文件的方法
練習(xí):圖片加密
練習(xí):根據(jù)用戶輸入的文件拷貝文件到當(dāng)前項目目錄
練習(xí):錄入數(shù)據(jù)拷貝到文件
緩沖區(qū):就是一個字節(jié)數(shù)組byte[]
為什么要定義一個字節(jié)數(shù)組的緩沖區(qū)?【原因:提高文件讀和寫的效率】
字符流
字符流就是讀和取都以字符【char】為單位
字符流內(nèi)部也是先讀取字節(jié),把字節(jié)轉(zhuǎn)成字符
Reader【字符輸入流,抽象類】
FileReader【文件字符輸入流】
案例:使用FileReader 讀取一個文本數(shù)據(jù)
BufferedReader【帶緩沖區(qū)的字符輸入流】
LineNumberReader【可以獲取行號,它是BufferedReader的子類】
InputStreamReader
Writer【字符輸出流,抽象類】
FileWriter【文件字符輸出流】
案例:使用FileWrite寫入數(shù)據(jù)
BufferedWriter【帶緩沖區(qū)的字符輸出流】
PrintWriter【打印字符流】
案例:字符流的拷貝
自定義字符數(shù)組的拷貝
案例:將文本反轉(zhuǎn)
練習(xí):獲取文本上字符出現(xiàn)的次數(shù)
遞歸
遞歸:文件目錄
練習(xí):從鍵盤輸入接收一個文件夾路徑,打印出該文件夾下所有的.jpg文件名
BufferedReader和BufferedWriter,內(nèi)部都【字符緩沖區(qū)數(shù)組】char[] cf;
裝飾設(shè)計模式
裝飾模式的實現(xiàn)方式
1.裝飾對象和真實對象有相同的接口。
2.裝飾對象包含一個真實對象的引用(reference)
3.裝飾對象的所有方法,內(nèi)部實現(xiàn)都是通過真實對象的引用來調(diào)用,然后實現(xiàn)自己的功能