java I/O流
File對象是檔案和檔案目錄路徑的抽象表示形式,與平台無關,它能建立、删除、重命名檔案和目錄,但 File 不能通路檔案内容本身,通路檔案本身需要流(Steam,Reader...)來執行
這個答案是不确定的,File建立出來的對象可以不存在,也可以存在,但如果要用File對象來表示一個真實存在的檔案或者檔案夾,就必須保證檔案存在!
了解了File之後,我們走向流
I/O是Input/Output的縮寫, I/O技術是非常實用的技術, 用于處理裝置之間的資料傳輸。 如讀/寫檔案,網絡通訊等
首先,這兩個概念都是針對程式來說的,将資料讀到程式類=輸入(input),将資料從程式寫到檔案或資料庫=輸出(output)
按操作資料機關分: 位元組流(8 bit),字元流(16 bit)
按資料流的流向分: 輸入流,輸出流
按流的角色分: 節點流,處理流
(抽象基類)
位元組流
字元流
輸入流
InputStream
Reader
輸出流
OutputStream
Writer
助記:人類閱讀(read)看到的是文字、字元等等,是以字元流就是:Reader和Writer,是以剩下的那個就是位元組流

InputStream 和 Reader 是所有輸入流的基類
OutputStream & Writer
寫入:
1.建立一個流對象,将已存在的一個檔案加載進流。
2.建立一個臨時存放資料的數組。
3.調用流對象的讀取方法将流中的資料讀入到數組中。
4.關閉資源。
輸出:
1.建立流對象,建立資料存放檔案
2.調用流對象的寫入方法,将資料寫入流
3.調用flush()清除緩存
4.關閉流資源,并将流中的資料清空到檔案中。
讀取
輸出
因為緩沖流的讀寫速度更快
InputStreamReader:将InputStream轉換為Reader
OutputStreamWriter:将Writer轉換為OutputStream
InputStreamReader的構造方法:
OutputStreamWriter的構造方法:
能傳輸java對象的一種流
用于存儲和讀取基本資料類型資料或對象的處理流。它的強大之處就是可以把Java中的對象寫入到資料源中(序列化),也能把對象從資料源中還原回來。(反序列化)
ObjectInputStream(反序列化)和OjbectOutputSteam(序列化)
序列化: 用ObjectOutputStream類儲存基本類型資料或對象的機制
反序列化: 用ObjectInputStream類讀取基本類型資料或對象的機制
對象序列化機制允許把記憶體中的Java對象轉換成平台無關的二進制流,進而允許把這種二進制流持久地儲存在磁盤上,或通過網絡将這種二進制流傳輸到另一個網絡節點。當其它程式擷取了這種二進制流,就可以恢複成原來的Java對象
1.自定義的類需要實作Serializable接口(相當于傳輸辨別),方可序列化;
2.自定義類的屬性都需要可序列化,比如自定義的屬性也需要實作Serializable接口;
3.實作了Serializable接口的類都需要有一個辨別序列化版本辨別符的靜态常量:
private static final long serialVersionUID;(可以随便給,如果不給,當該類被修改後,就無法還原)
4.注意事項:ObjectOutputStream和ObjectInputStream不能序列化static和transient修飾的成員變量
首先建好要傳輸的實體對象
編寫序列化類
反序列化類
運作結果:
稍作改動Person類:
再次運作,結果如下:
到此結束