說資料持久化,初學者可能還不太懂;但要說把資料儲存到檔案,這誰都懂了。為什麼說持久化就是把資料儲存到檔案。持久化指的就是當程式退出後,其中的資料能夠保留下來,供程式再次啟動並執行時候使用。這些資料保留在什麼地方最好呢。當然是檔案裡。
儲存到檔案是資料持久化最常用的方式,除此之外,還可以把資料儲存到資料庫,或者發送到其它機器,這都是持久化。不過儲存在檔案是最簡單的方式。具體來說就是:選取需要儲存的資料,按照一定的格式組織起來,然後寫入檔案。下面是一個簡單的例子:
import java.io.*; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 持久化樣本。如何將記憶體中的資料儲存起來,並沒有一定的格式,任何人 * 都可以根據自己的喜好來制定。持久化需要檔案操作,所以請務必先弄懂 * 如何讀寫檔案。 */ public class Persistant { // 檔案名稱可隨意指定,你可以用文字編輯器開啟這個檔案(注意,記事本無法處理換行) static String filename = "persons.data"; public static void main(String[] args) throws Exception { // 將這個程式運行兩遍。 // 第一遍它會建立一些 Person 對象並儲存到檔案; // 第二遍它會從檔案中讀取對象資料並顯示出來。 if (!new File(filename).exists()) { createAndSave(); } else { readAndShow(); } } // 產生並儲存 Person 對象 private static void createAndSave() throws IOException { List<Person> persons = createPersons(); savePersons(persons); } // 讀取並顯示 Person 對象 private static void readAndShow() throws IOException { List<Person> persons = readPersons(); showPersons(persons); } // 建立要儲存的 Person 對象 private static List<Person> createPersons() { List<Person> result = new ArrayList<Person>(); result.add(new Person("張三", new Date(), true)); result.add(new Person("李四", new Date(), false)); result.add(new Person("王五", new Date(), true)); return result; } // 儲存 Person 對象到檔案。儲存格式為: // 1、每個 Person 一行 // 2、每行依次存放 name、birthday、male 三個屬性值,用 tab 隔開 // 3、birthday 屬性儲存的是毫秒數,male 屬性儲存的是字串 private static void savePersons(List<Person> persons) throws IOException { // 組建檔案內容 String data = ""; for (Person person : persons) { data += getPersonString(person) + "/n"; } // 儲存檔案內容 FileWriter writer = new FileWriter(filename); writer.write(data); writer.close(); System.out.println("對象儲存完畢。"); } private static String getPersonString(Person person) { return person.getName() + "/t" + person.getBirthday().getTime() + "/t" + person.isMale(); } // 從檔案中讀取 Person 對象 private static List<Person> readPersons() throws IOException { List<Person> result = new ArrayList<Person>(); BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while ((line = reader.readLine()) != null) { result.add(getPersonFromString(line)); } return result; } // 通過一行檔案內容產生一個 Person 對象 private static Person getPersonFromString(String line) { String[] parts = line.split("/t"); // 擷取被分隔的三個部分 return new Person( parts[0], // 姓名 new Date(Long.parseLong(parts[1])), // 出生日期 Boolean.parseBoolean(parts[2]) // 是否為男性 ); } // 顯示 Person 對象 private static void showPersons(List<Person> persons) { for (Person person : persons) { System.out.println(person.getName() + ", " + person.getBirthday() + ", " + (person.isMale() ? "男" : "女")); } } } // 要持久化的類 class Person { private String name; // 姓名 private Date birthday; // 生日 private boolean male; // true 表示男性,false 表示女性 Person(String name, Date birthday, boolean male) { this.name = name; this.birthday = birthday; this.male = male; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public boolean isMale() { return male; } public void setMale(boolean male) { this.male = male; } }
PS:如何在粘貼代碼時保留空行
空行是代碼中的重要組成部分,可惜在 CSDN Blog 中粘貼代碼,它是會把空行去掉的。解決辦法是在空行前面加一個空格。