Mega Code Archive

 
Categories / Java / File Input Output
 

Text File Test

/*    This program is a part of the companion code for Core Java 8th ed.    (http://horstmann.com/corejava)    This program is free software: you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation, either version 3 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program.  If not, see <http://www.gnu.org/licenses/>. */ import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Scanner; /**  * @version 1.12 2007-06-22  * @author Cay Horstmann  */ 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", 40000, 1990, 3, 15);       try       {          // save all employee records to the file employee.dat          PrintWriter out = new PrintWriter("employee.dat");          writeData(staff, out);          out.close();          // retrieve all records into a new array          Scanner in = new Scanner(new FileReader("employee.dat"));          Employee[] newStaff = readData(in);          in.close();          // print the newly read employee records          for (Employee e : newStaff)             System.out.println(e);       }       catch (IOException exception)       {          exception.printStackTrace();       }    }    /**     * Writes all employees in an array to a print writer     * @param employees an array of employees     * @param out a print writer     */    private static void writeData(Employee[] employees, PrintWriter out) throws IOException    {       // write number of employees       out.println(employees.length);       for (Employee e : employees)          e.writeData(out);    }    /**     * Reads an array of employees from a scanner     * @param in the scanner     * @return the array of employees     */    private static Employee[] readData(Scanner in)    {       // retrieve the array size       int n = in.nextInt();       in.nextLine(); // consume newline       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             + "]";    }    /**     * Writes employee data to a print writer     * @param out the print writer     */    public void writeData(PrintWriter out)    {       GregorianCalendar calendar = new GregorianCalendar();       calendar.setTime(hireDay);       out.println(name + "|" + salary + "|" + calendar.get(Calendar.YEAR) + "|"             + (calendar.get(Calendar.MONTH) + 1) + "|" + calendar.get(Calendar.DAY_OF_MONTH));    }    /**     * Reads employee data from a buffered reader     * @param in the scanner     */    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; }