Java核心技術II:以文本格式存儲對象

程序清單1-1 TextFileTest.java

import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class TextFileTest {
    public static void main(String[] args) {
        Employee[] staff=new  Employee[3];
        staff[0]=new  Employee("Carl Cracker", 75000, 1987, 12, 15);
        staff[1]=new  Employee("Harry Hacker", 50000, 1989, 10, 1);
        staff[2]=new  Employee("Tony Tester", 4000, 1990, 3, 15);
        try {
            PrintWriter out=new  PrintWriter("D:\\employee.dat");

            writeData(staff, out);
            out.close();
            Scanner in=new  Scanner(new  FileReader("employee.dat"));
            Employee[] newStaff=readData(in);
            in.close();
            for(Employee e:newStaff){
                System.out.println(e);
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
    private static void writeData(Employee[] employees,PrintWriter out){
        out.println(employees.length);
        for(Employee e:employees){
            e.writeData(out);
        }
    }
    private static Employee[] readData(Scanner in){
        int n=in.nextInt();
        in.nextLine();

        Employee[] employees=new  Employee[n];
        for(int i=0;i<n;i++){
            employees[i]=new  Employee();
            employees[i].readData(in);
        }
        return employees;
    }
}
class Employee {
    public Employee(){

    }
    public Employee(String n,double s,int year,int month,int day){
        name=n;
        salary=s;
        GregorianCalendar calendar=new  GregorianCalendar(year,month-1,day);
        hireDay=calendar.getTime();

    }

    public String getName() {
        return name;
    }
    public double getSalary() {
        return salary;
    }
    public Date getHireDay() {
        return hireDay;
    }
    public void raiseSalary(double byPercent){
        double raise=salary*byPercent/100;
        salary+=raise;
    }
    public String toString() {

        return getClass().getName()+"[name="+name+",salary="+salary+",hireDay="+hireDay+"]";


    }
    public void writeData(PrintWriter out) {
        GregorianCalendar calendar=new  GregorianCalendar();
        calendar.setTime(hireDay);
        out.println(name+"|"+salary+"|"+calendar.get(Calendar.YEAR)+"|"+(calendar.get(Calendar.MONTH))+"|"+calendar.get(Calendar.DAY_OF_MONTH));
    }
    public void  readData(Scanner in) {
        String line=in.nextLine();
        String[] tokens=line.split("\\|");
        name=tokens[0];
        salary=Double.parseDouble(tokens[1]);
        int y=Integer.parseInt(tokens[2]);
        int m=Integer.parseInt(tokens[3]);
        int d=Integer.parseInt(tokens[4]);
        GregorianCalendar calendar=new  GregorianCalendar(y,m-1,d);
        hireDay=calendar.getTime();
    }

    private String name;
    private double salary;
    private Date hireDay;
}

先用writeData寫出記錄到文件中,再從文件中通過readData讀取存到數組當中,並打印到控制檯。上面代碼經過驗證正確,可以參考。

發佈了45 篇原創文章 · 獲贊 8 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章