隨筆-199  評論-203  文章-11  trackbacks-0

          說數據持久化,初學者可能還不太懂;但要說把數據保存到文件,這誰都懂了。為什么說持久化就是把數據保存到文件?持久化指的就是當程序退出后,其中的數據能夠保留下來,供程序再次運行的時候使用。這些數據保留在什么地方最好呢?當然是文件里。

           

          保存到文件是數據持久化最常用的方式,除此之外,還可以把數據保存到數據庫,或者發送到其它機器,這都是持久化。不過保存在文件是最簡單的方式。具體來說就是:選取需要保存的數據,按照一定的格式組織起來,然后寫入文件。下面是一個簡單的例子:

           

          1. import java.io.*;   
          2. import java.util.ArrayList;   
          3. import java.util.Date;   
          4. import java.util.List;   
          5.     
          6. /**  
          7.  * 持久化示例。如何將內存中的數據保存起來,并沒有一定的格式,任何人  
          8.  * 都可以根據自己的喜好來制定。持久化需要文件操作,所以請務必先弄懂  
          9.  * 如何讀寫文件。  
          10.  */  
          11. public class Persistant {   
          12.     
          13.     // 文件名可隨意指定,你可以用文本編輯器打開這個文件(注意,記事本無法處理換行)   
          14.     static String filename = "persons.data";   
          15.     
          16.     public static void main(String[] args) throws Exception {   
          17.         // 將這個程序運行兩遍。   
          18.         // 第一遍它會創建一些 Person 對象并保存到文件;   
          19.         // 第二遍它會從文件中讀取對象數據并顯示出來。   
          20.         if (!new File(filename).exists()) {   
          21.             createAndSave();   
          22.         } else {   
          23.             readAndShow();   
          24.         }   
          25.     }   
          26.     
          27.     // 生成并保存 Person 對象   
          28.     private static void createAndSave() throws IOException {   
          29.         List<Person> persons = createPersons();   
          30.         savePersons(persons);   
          31.     }   
          32.     
          33.     // 讀取并顯示 Person 對象   
          34.     private static void readAndShow() throws IOException {   
          35.         List<Person> persons = readPersons();   
          36.         showPersons(persons);   
          37.     }   
          38.     
          39.     // 創建要保存的 Person 對象   
          40.     private static List<Person> createPersons() {   
          41.         List<Person> result = new ArrayList<Person>();   
          42.         result.add(new Person("張三"new Date(), true));   
          43.         result.add(new Person("李四"new Date(), false));   
          44.         result.add(new Person("王五"new Date(), true));   
          45.         return result;   
          46.     }   
          47.     
          48.     // 保存 Person 對象到文件。保存格式為:   
          49.     // 1、每個 Person 一行   
          50.     // 2、每行依次存放 name、birthday、male 三個屬性值,用 tab 隔開   
          51.     // 3、birthday 屬性保存的是毫秒數,male 屬性保存的是字符串   
          52.     private static void savePersons(List<Person> persons) throws IOException {   
          53.     
          54.         // 生成文件內容   
          55.         String data = "";   
          56.         for (Person person : persons) {   
          57.             data += getPersonString(person) + "\n";   
          58.         }   
          59.     
          60.         // 保存文件內容   
          61.         FileWriter writer = new FileWriter(filename);   
          62.         writer.write(data);   
          63.         writer.close();   
          64.         System.out.println("對象保存完畢。");   
          65.     }   
          66.     
          67.     private static String getPersonString(Person person) {   
          68.         return person.getName() + "\t" + person.getBirthday().getTime() + "\t" + person.isMale();   
          69.     }   
          70.     
          71.     // 從文件中讀取 Person 對象   
          72.     private static List<Person> readPersons() throws IOException {   
          73.         List<Person> result = new ArrayList<Person>();   
          74.     
          75.         BufferedReader reader = new BufferedReader(new FileReader(filename));   
          76.         String line;   
          77.         while ((line = reader.readLine()) != null) {   
          78.             result.add(getPersonFromString(line));   
          79.         }   
          80.     
          81.         return result;   
          82.     }   
          83.     
          84.     // 通過一行文件內容生成一個 Person 對象   
          85.     private static Person getPersonFromString(String line) {   
          86.         String[] parts = line.split("\t");  // 獲取被分隔的三個部分   
          87.     
          88.         return new Person(   
          89.                 parts[0],                               // 姓名   
          90.                 new Date(Long.parseLong(parts[1])),     // 出生日期   
          91.                 Boolean.parseBoolean(parts[2])          // 是否為男性   
          92.         );   
          93.     }   
          94.     
          95.     // 顯示 Person 對象   
          96.     private static void showPersons(List<Person> persons) {   
          97.         for (Person person : persons) {   
          98.             System.out.println(person.getName() + ", " +   
          99.                     person.getBirthday() + ", " +   
          100.                     (person.isMale() ? "男" : "女"));   
          101.         }   
          102.     }   
          103. }   
          104.     
          105. // 要持久化的類   
          106. class Person {   
          107.     
          108.     private String name;        // 姓名   
          109.     
          110.     private Date birthday;      // 生日   
          111.     
          112.     private boolean male;       // true 表示男性,false 表示女性   
          113.     
          114.     Person(String name, Date birthday, boolean male) {   
          115.         this.name = name;   
          116.         this.birthday = birthday;   
          117.         this.male = male;   
          118.     }   
          119.     
          120.     public String getName() {   
          121.         return name;   
          122.     }   
          123.     
          124.     public void setName(String name) {   
          125.         this.name = name;   
          126.     }   
          127.     
          128.     public Date getBirthday() {   
          129.         return birthday;   
          130.     }   
          131.     
          132.     public void setBirthday(Date birthday) {   
          133.         this.birthday = birthday;   
          134.     }   
          135.     
          136.     public boolean isMale() {   
          137.         return male;   
          138.     }   
          139.     
          140.     public void setMale(boolean male) {   
          141.         this.male = male;   
          142.     }   
          143. }  


          轉:http://blog.csdn.net/YidingHe/archive/2009/03/09/3971073.aspx
          posted on 2009-03-10 07:52 Werther 閱讀(4115) 評論(0)  編輯  收藏 所屬分類: 10.Java
          主站蜘蛛池模板: 温泉县| 桃江县| 叶城县| 荔波县| 沙田区| 新乡县| 浮山县| 京山县| 简阳市| 隆尧县| 东乌珠穆沁旗| 贡觉县| 泽库县| 丰宁| 金湖县| 呼伦贝尔市| 乐昌市| 金乡县| 浮梁县| 泽州县| 福海县| 秀山| 崇左市| 商水县| 黄浦区| 文水县| 二连浩特市| 鸡西市| 白河县| 漳州市| 阿坝| 德清县| 石屏县| 科技| 营口市| 株洲县| 五指山市| 遵化市| 霍邱县| 中牟县| 冕宁县|