1. 程式人生 > >java的IO流學習總結

java的IO流學習總結

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))
  1. 從硬碟中讀入一個檔案,要求此檔案一定得存在。若不存在,報FileNotFoundException的異常
  2. 從程式中輸出一個檔案到硬碟,此檔案可以不存在。若不存在,就建立一個實現輸出。若存在,則將已存在的檔案覆蓋
  3. 真正開發時,就使用緩衝流來代替節點流
  4. 主要最後要關閉相應的流。先關閉輸出流,再關閉輸入流。將此操作放入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) 
  •       支援從檔案的開頭讀取、寫入。若輸出的檔案不存在,直接建立。若存在,則是對原有檔案內容的覆蓋。
  •       支援任意位置的 “插入”。