Java的IO流是實作輸入和輸出的基礎,可以友善的實作資料的輸入和輸出操作。在java中把不同的輸入/輸出源(鍵盤,檔案,網絡連接配接等)抽象表述為“流”(stream)。
按照 流的檔案類型:位元組流(InputStream、OutputStream)和字元流(Reader,Writer)
按照 流的流向:輸入流和輸出流
按照 功能 :節點流 和 過濾流
所有檔案資料(文本、圖檔、視訊等)在存儲時,都是二進制數字的形式,也就是一個一個的位元組,傳輸時一樣如此。是以,位元組流可以傳輸任意檔案資料。
絕對路徑:一個完整的路徑,以盤符開頭,例如F://123.txt
相對路徑:一個簡化的路徑,不以盤符開頭,例如//123.txt//b.txt。
getAbsolutePath() :傳回此File的絕對路徑名字元串。
getPath() :将此File轉換為路徑名字元串。
getName() :傳回由此File表示的檔案或目錄的名稱。
length() :傳回由此File表示的檔案的長度(位元組)
如果File是目錄,則傳回值未指定。
exists() :此File表示的檔案或目錄是否存在。
isDirectory() :此File表示的是否為 目錄。
isFile() :此File表示的是否為 檔案。
createNewFile() :檔案不存在,建立一個新的空檔案并傳回true,檔案存在,不建立檔案并傳回false。
delete() :删除由此File表示的檔案或目錄。
mkdir() :建立由此File表示的目錄。如果父類不存在,則建立失敗
mkdirs():建立由此File表示的目錄,同時建立不存在的父級目錄。
是以一般選用 mkdirs()
那麼什麼時候用位元組流什麼時用字元流呢
在周遊檔案時候,一般選擇字元流
而對檔案的内容進行讀寫操作時一般用位元組流
無論使用什麼樣的流對象,底層傳輸的始終為二進制資料。但在用字元流讀寫檔案内容時,規定的字元容器可能會大于需要讀寫的的内容(位元組)
public FileOutputStream(File file):以File對象為參數建立對象。
public FileOutputStream(String name): 以名稱字元串為參數建立對象。
開發常用第二種,指定路徑字元串
注意:建立輸出流對象的時候,如果路徑不存在,系統會自動去對應位置建立對應檔案
輸入流對象的時候,檔案不存在則會報FileNotFoundException異常
當我向有資料的檔案中寫出位元組時,可以傳入第二個參數Boolean
boolean為ture時,表示追加資料,不會對中繼資料進行覆寫。
false 表示不追加 也就是清空原有資料。
構造方法類比輸出流
同樣推薦第二種狗構造方法
當你建立一個流對象時,傳入的路徑下,該檔案,會抛出
輸出結果為 ab cd ed
為何:因為長度為2的數組,每次讀取2個字元,下次讀取時,另外兩個字元将原字元覆寫
第一次:ab
第二次:c覆寫a,d覆寫b 結果為cd
第三次:e覆寫d,原來的d沒有被覆寫,是以結果為 ed
close() :關閉流
flush() :強制緩沖的輸出位元組寫出。
write(byte[] b):将Byte數組 .length()個位元組數組寫入輸出流。
write(byte[] b, int off, int len) :從偏移量 off開始輸出到此輸出流,讀取len個字元
write(int b) :将指定的位元組輸出流。
建立流對象時,會建立一個内置的預設大小的緩沖區數組,通過緩沖區讀寫,減少系統IO次數,進而提高讀寫的效率。
public BufferedInputStream(InputStream in) :建立一個新的緩沖輸入流,注意參數類型為InputStream。
位元組輸出流一樣。
舉例:
編碼:字元(能看懂的) –> 位元組(看不懂的)
解碼:位元組(看不懂的) –> 字元(能看懂的)
FileReader 讀取項目中的文本檔案。由于IDEA的設定,都是預設的UTF-8編碼
但是,由于Windows系統的預設是GBK編碼,讀取Windows系統中建立的文本檔案時,就會出現亂碼。
Java 提供了一種對象序列化的機制。用一個位元組序列可以表示一個對象,該位元組序列包含該對象的資料、對象的類型和對象中存儲的屬性等資訊。位元組序列寫出到檔案之後,相當于檔案中持久儲存了一個對象的資訊
1.該類必須實作java.io.Serializable 接口,Serializable 是一個标記接口,不實作此接口的類将不會使任何狀态序列化或反序列化,會抛出NotSerializableException 。
2.該類的所有屬性必須是可序列化的。如果有一個屬性不需要可序列化的,則該屬性必須注明是瞬态的,使用transient 關鍵字修飾。
一種類與類互動的模式