java的IO流學習總結
阿新 • • 發佈:2018-11-09
1.java.io包下
- File類:java程式中的此類的一個物件,就對應著硬碟中的一個檔案或網路中的一個資源。
- File file1 = new File("d:\\io\\helloworld.txt");
- File file2 = new File("d:\\io\\io1");
- >1.File既可以表示一個檔案(.doc .xls .mp3 .avi .jpg .dat),也可以表示一個檔案目錄!
- >2.File類的物件是與平臺無關的。
- >3.File類針對於檔案或檔案目錄,只能進行新建、刪除、重新命名、上層目錄等等的操作。如果涉及到訪問檔案的內容,File
- 是無能為力的,只能使用IO流下提供的相應的輸入輸出流來實現。
- >4.常把File類的物件作為形參傳遞給相應的輸入輸出流的構造器中!
2.IO 流的結構
3.IO流的劃分
- 1) 按照流的流向的不同:輸入流 輸出流 (站位於程式的角度)
- 2) 按照流中的資料單位的不同:位元組流 字元流 (純文字檔案使用字元流 ,除此之外使用位元組流)
- 3) 按照流的角色的不同:節點流 處理流 (流直接作用於檔案上是節點流(4個),除此之外都是處理流)
4.重點掌握
- 抽象基類 節點流(檔案流) 緩衝流(處理流的一種,可以提升檔案操作的效率)
- InputStream FileInputStream (int read(byte[] b)) BufferedInputStream (int read(byte[] b))
- OutputStream FileOutputStream (void write(b,0,len)) BufferedOutputStream (flush()) (void write(b,0,len))
- Reader FileReader (int read(char[] c)) BufferedReader (readLine()) (int read(char[] c))或String readLine()
- Writer FileWriter (void write(c,0,len)) BufferedWriter (flush()) (void write(c,0,len)或void write(String str))
- 從硬碟中讀入一個檔案,要求此檔案一定得存在。若不存在,報FileNotFoundException的異常
- 從程式中輸出一個檔案到硬碟,此檔案可以不存在。若不存在,就建立一個實現輸出。若存在,則將已存在的檔案覆蓋
- 真正開發時,就使用緩衝流來代替節點流
- 主要最後要關閉相應的流。先關閉輸出流,再關閉輸入流。將此操作放入finally
5.其它的流
1.轉換流:實現位元組流與字元流之間的轉換
- InputStreamReader:輸入時,實現位元組流到字元流的轉換,提高操作的效率(前提是,資料是文字檔案) ===>解碼:位元組陣列--->字串
- OutputStreamWriter:輸出時,實現字元流到位元組流的轉換。 ===>編碼: 字串---->位元組陣列
- 例子:從鍵盤輸入字串,要求將讀取到的整行字串轉成大寫輸出。然後繼續進行輸入操作,直至當輸入“e”或者“exit”時,退出程式。
2.標準的輸入輸出流
- System.in: The "standard" input stream:從鍵盤輸入資料
- System.out:The "standard" output stream:從顯示器輸出資料
3.列印流 (都是輸出流) PrintStream(處理位元組) PrintWriter(處理字元)
- 可以使用System.setOut(PrintStream p)重新設定一下輸出的位置。
- PrintStream p = new PrintStream(new FileOutputStream("hello.txt"),true);
4.資料流(處理基本資料型別、String類、位元組陣列)
- DataInputStream DataOutputStream
5.物件流(用來處理物件的)
- 物件的序列化機制:允許把記憶體中的Java物件轉換成平臺無關的二進位制流,從而允許把這種二進位制流持久地儲存在磁碟上,
- 或通過網路將這種二進位制流傳輸到另一個網路節點。當其它程式獲取了這種二進位制流,就可以恢復成原來的Java物件
- ObjectInputStream(Object readObject();)
- ObjectOutputStream (void writeObject(Object obj))
- 如何建立流的物件:
- ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));
- ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("person.txt")));
實現序列化機制的物件對應的類的要求:
- ①要求類要實現Serializable介面
- ②同樣要求類的所有屬性也必須實現Serializable介面
- ③ 要求給類提供一個序列版本號:private static final long serialVersionUID;
- ④屬性宣告為static 或transient的,不可以實現序列化
6.隨機存取檔案流:RandomAccessFile
- 既可以充當一個輸入流,又可以充當一個輸出流:public RandomAccessFile(File file, String mode)
- 支援從檔案的開頭讀取、寫入。若輸出的檔案不存在,直接建立。若存在,則是對原有檔案內容的覆蓋。
- 支援任意位置的 “插入”。