隨筆-199  評(píng)論-203  文章-11  trackbacks-0

          說(shuō)數(shù)據(jù)持久化,初學(xué)者可能還不太懂;但要說(shuō)把數(shù)據(jù)保存到文件,這誰(shuí)都懂了。為什么說(shuō)持久化就是把數(shù)據(jù)保存到文件?持久化指的就是當(dāng)程序退出后,其中的數(shù)據(jù)能夠保留下來(lái),供程序再次運(yùn)行的時(shí)候使用。這些數(shù)據(jù)保留在什么地方最好呢?當(dāng)然是文件里。

           

          保存到文件是數(shù)據(jù)持久化最常用的方式,除此之外,還可以把數(shù)據(jù)保存到數(shù)據(jù)庫(kù),或者發(fā)送到其它機(jī)器,這都是持久化。不過(guò)保存在文件是最簡(jiǎn)單的方式。具體來(lái)說(shuō)就是:選取需要保存的數(shù)據(jù),按照一定的格式組織起來(lái),然后寫(xiě)入文件。下面是一個(gè)簡(jiǎn)單的例子:

           

          1. import java.io.*;   
          2. import java.util.ArrayList;   
          3. import java.util.Date;   
          4. import java.util.List;   
          5.     
          6. /**  
          7.  * 持久化示例。如何將內(nèi)存中的數(shù)據(jù)保存起來(lái),并沒(méi)有一定的格式,任何人  
          8.  * 都可以根據(jù)自己的喜好來(lái)制定。持久化需要文件操作,所以請(qǐng)務(wù)必先弄懂  
          9.  * 如何讀寫(xiě)文件。  
          10.  */  
          11. public class Persistant {   
          12.     
          13.     // 文件名可隨意指定,你可以用文本編輯器打開(kāi)這個(gè)文件(注意,記事本無(wú)法處理?yè)Q行)   
          14.     static String filename = "persons.data";   
          15.     
          16.     public static void main(String[] args) throws Exception {   
          17.         // 將這個(gè)程序運(yùn)行兩遍。   
          18.         // 第一遍它會(huì)創(chuàng)建一些 Person 對(duì)象并保存到文件;   
          19.         // 第二遍它會(huì)從文件中讀取對(duì)象數(shù)據(jù)并顯示出來(lái)。   
          20.         if (!new File(filename).exists()) {   
          21.             createAndSave();   
          22.         } else {   
          23.             readAndShow();   
          24.         }   
          25.     }   
          26.     
          27.     // 生成并保存 Person 對(duì)象   
          28.     private static void createAndSave() throws IOException {   
          29.         List<Person> persons = createPersons();   
          30.         savePersons(persons);   
          31.     }   
          32.     
          33.     // 讀取并顯示 Person 對(duì)象   
          34.     private static void readAndShow() throws IOException {   
          35.         List<Person> persons = readPersons();   
          36.         showPersons(persons);   
          37.     }   
          38.     
          39.     // 創(chuàng)建要保存的 Person 對(duì)象   
          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 對(duì)象到文件。保存格式為:   
          49.     // 1、每個(gè) Person 一行   
          50.     // 2、每行依次存放 name、birthday、male 三個(gè)屬性值,用 tab 隔開(kāi)   
          51.     // 3、birthday 屬性保存的是毫秒數(shù),male 屬性保存的是字符串   
          52.     private static void savePersons(List<Person> persons) throws IOException {   
          53.     
          54.         // 生成文件內(nèi)容   
          55.         String data = "";   
          56.         for (Person person : persons) {   
          57.             data += getPersonString(person) + "\n";   
          58.         }   
          59.     
          60.         // 保存文件內(nèi)容   
          61.         FileWriter writer = new FileWriter(filename);   
          62.         writer.write(data);   
          63.         writer.close();   
          64.         System.out.println("對(duì)象保存完畢。");   
          65.     }   
          66.     
          67.     private static String getPersonString(Person person) {   
          68.         return person.getName() + "\t" + person.getBirthday().getTime() + "\t" + person.isMale();   
          69.     }   
          70.     
          71.     // 從文件中讀取 Person 對(duì)象   
          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.     // 通過(guò)一行文件內(nèi)容生成一個(gè) Person 對(duì)象   
          85.     private static Person getPersonFromString(String line) {   
          86.         String[] parts = line.split("\t");  // 獲取被分隔的三個(gè)部分   
          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 對(duì)象   
          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. // 要持久化的類(lèi)   
          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. }  


          轉(zhuǎn):http://blog.csdn.net/YidingHe/archive/2009/03/09/3971073.aspx
          posted on 2009-03-10 07:52 Werther 閱讀(4117) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 10.Java
          主站蜘蛛池模板: 石门县| 佛教| 确山县| 福海县| 高安市| 和平县| 普兰县| 宜宾市| 阜康市| 手机| 图木舒克市| 金溪县| 邵阳县| 阳东县| 临桂县| 华池县| 桃园市| 罗甸县| 卓资县| 江阴市| 五原县| 察雅县| 嘉禾县| 友谊县| 华阴市| 白沙| 华容县| 三门峡市| 丽水市| 祥云县| 宁海县| 麻江县| 湾仔区| 安图县| 息烽县| 汽车| 来安县| 金乡县| 田东县| 屯昌县| 施秉县|