1. 程式人生 > >Java數據存入文件和讀取文件

Java數據存入文件和讀取文件

讀取 節點流 bsp iou iter bject 應該 tput 使用

  在Java程序開發過程中我們發現並不能夠讓程序多次運行時獲得上一次關閉程序前的運行結果——我們沒有將運行的結果加以保存。這個時候我們就要找到Java操作讀取數據的方法(以操作文件為例):Java中的輸入/輸出模型,I/O模型又稱為I/O流。(以下簡稱I/O流)。

  流按方向可以分為輸入(input)和輸出(output)2種。輸入和輸出是相對的,這裏我們是站在程序的角度來看的,將程序的數據寫到文件就是輸出,從文件中讀取數據就是輸入。

  按類型(大小)可以分為字節型(byte)和字符型(byte)2種,字符流對象類型為Reader和Writer,字節流對象的類型為InputStream和OutputStream。我們知道字符(char)的大小是字節(byte)的兩倍,但是這不是說字符型的I/O流就要比字節型的適用範圍更廣。具體地說,字符型的I/O流只有在操作純文本(TXT)文件的時候才適用,並且不包括word等文件;除了TXT文件之外,其他類型的文件在被計算機解析的時候都會當做字節碼處理,也就是由二進制的1和0組成,此時文件的讀取用字符類型I/O流就不合適。實際使用中我們要根據文件的類型(是否TXT)來選擇所使用的I/O流類型。

  按作用分類又可以分為節點流(如FileInputStream)和操作流(如ObjectInputStream)2種。節點是指流兩端鏈接的可以是文件或者是其他的對象,節點流就是直接鏈接兩個操作對象的流。而操作流不能連接兩個操作對象,它必須依附與某種節點流而使用,它的功能是指定所需傳送的數據的傳送形式。

  Java中,能夠直接操作文件的常見有Properties類型的集合,Properties對象調用這個類型的.store(參數)方法 和load(參數)方法,參數位置放一個I/O流對象即可對文件進行存取操作。而實際使用中我們將各種類型的數據轉換成Properties類型的數據會非常麻煩。這個時候我們就需要能夠將數據已對象的形式進行存取的一種I/O流,也就是上文中講的操作流。

  此處詳細講一下操作流(ObjectOutputStream和ObjectInputStream)。

  有一點需要註意的是,將對象寫到文件時需要先讓對象繼承Serializable接口,該接口不需要重寫任何方法,僅僅是作為該對象可被序列化的標識。若要使對象重的某個屬性不可被序列化,需要再該屬性前加上可選修飾符——transient關鍵字。以下為操作流的具體用法。

  ObjectIOututStream oos = null;   //定義一個操作流對象,名為oos

  oos = new ObjectIOututStream(new FileIOutputStream("abc.Dos");

  //初始化oos (此處應該捕獲異常,篇幅有限,從略);

  //構造方法中傳入一個節點流對象;

  //節點流中參數為String類型的文件路徑

  ois.writeObject(參數);  //調用writeObject()方法,參數為已經實現了Serializable接口的對象

  這樣我們就完成了見對象存為未見的操作。  

  ObjectInputStream ois = null;   //定義一個操作流對象,名為ois

  ois = new ObjectInputStream(new FileInputStream("abc.Dos");

  //初始化ois (此處應該捕獲異常,篇幅有限,從略);

  //構造方法中傳入一個節點流對象;

  //節點流中參數為String類型的文件路徑

  Object obj = ois.readObject();  //調用readObject()方法,返回Object類型的對象,按需可以強轉

  這樣 就完成了從文件中讀取對象的操作。

  總之,我們要確定所要做的時確定輸入還是輸出,是字符流還是字節流,是那種類型,目的地或者數據源,然後按步驟調用方法完成數據的存取即可。

  

  

Java數據存入文件和讀取文件