EmployeeMain.java
package com.dreamhome.file;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;public class EmployeeMain { /**
 * @param args
 */
public static void main(String[] args) {
Employee[] staff=new Employee[3];
staff[0]=new Employee("Tom", 562.12, 2012, 3, 21);
staff[1]=new Employee("Tony", 4568, 2012, 2, 21);
staff[2]=new Employee("hu", 562.12, 2012, 1, 21);
try {
PrintWriter out=new PrintWriter("employee.txt");
writeDate(staff, out);
out.close();
Scanner in=new Scanner(new FileReader("employee.txt"));
Employee[] newStaff=readDate(in);
in.close();
for(Employee e : newStaff){
System.out.println(e);
}
} catch (FileNotFoundException e) {
System.out.println("文件不存在");
}
}

private static void writeDate(Employee[] employees,PrintWriter out){
out.println(employees.length);
for (Employee e:employees) {
e.writeData(out);
}
}

private static Employee[] readDate(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;
}
}
[code]
Employee.java
package com.dreamhome.file;import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;public class Employee {
private String name;
private double salary;
private Date hireDate; public Employee() {
} public Employee(String name, double salary, int year, int month, int day) {
this.name = name;
this.salary = salary;
GregorianCalendar calendar = new GregorianCalendar(year, month + 1, day);
hireDate = calendar.getTime();
} public double getSalary() {
return salary;
} public Date getHireDate() {
return hireDate;
} public String getName() {
return name;
} @Override
public String toString() {
return getClass().getName() + "[name=" + name + ",salary" + salary
+ ",hireDate" + hireDate + "]";
} public void writeData(PrintWriter out) {
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(hireDate);
System.out.println(name + "|" + salary + "|"
+ calendar.get(Calendar.YEAR) + "|"
+ calendar.get(Calendar.MONTH + 1)+"|"+calendar.get(Calendar.DATE));
}

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);
hireDate=calendar.getTime();
}
}[/code]

解决方案 »

  1.   

    Tom|562.12|2012|21|21
    Tony|4568.0|2012|16|21
    hu|562.12|2012|12|21
    Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at com.dreamhome.file.Employee.readData(Employee.java:51)
    at com.dreamhome.file.EmployeeMain.readDate(EmployeeMain.java:46)
    at com.dreamhome.file.EmployeeMain.main(EmployeeMain.java:23)
      输入是正确的,读取的时候有错误。
      

  2.   

    Employee.writeData是怎么写的啊 ?
      

  3.   

    Employee.readData  把类发全了嘛,也可以调试一下
      

  4.   

    at com.dreamhome.file.Employee.readData(Employee.java:51)
      

  5.   


    Employee.java
    package com.dreamhome.file;import java.io.PrintWriter;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Scanner;public class Employee {
    private String name;
    private double salary;
    private Date hireDate; public Employee() {
    } public Employee(String name, double salary, int year, int month, int day) {
    this.name = name;
    this.salary = salary;
    GregorianCalendar calendar = new GregorianCalendar(year, month + 1, day);
    hireDate = calendar.getTime();
    } public double getSalary() {
    return salary;
    } public Date getHireDate() {
    return hireDate;
    } public String getName() {
    return name;
    } @Override
    public String toString() {
    return getClass().getName() + "[name=" + name + ",salary" + salary
    + ",hireDate" + hireDate + "]";
    } public void writeData(PrintWriter out) {
    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(hireDate);
    System.out.println(name + "|" + salary + "|"
    + calendar.get(Calendar.YEAR) + "|"
    + calendar.get(Calendar.MONTH + 1)+"|"+calendar.get(Calendar.DATE));
    }

    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);
    hireDate=calendar.getTime();
    }
    }
      

  6.   

    Employee.java中的writeData(PrintWriter out)方法中的System.out改成out
      

  7.   


    package com.dreamhome.file;import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.PrintWriter;
    import java.util.Scanner;
    import java.io.PrintWriter;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;class Employee {
        private String name;
        private double salary;
        private Date hireDate;    public Employee() {
        }    public Employee(String name, double salary, int year, int month, int day) {
            this.name = name;
            this.salary = salary;
            GregorianCalendar calendar = new GregorianCalendar(year, month + 1, day);
            hireDate = calendar.getTime();
        }    public double getSalary() {
            return salary;
        }    public Date getHireDate() {
            return hireDate;
        }    public String getName() {
            return name;
        }    @Override
        public String toString() {
            return getClass().getName() + "[name=" + name + ",salary" + salary
                    + ",hireDate" + hireDate + "]";
        }    public void writeData(PrintWriter out) {
            GregorianCalendar calendar = new GregorianCalendar();
            calendar.setTime(hireDate);
            //System.out --你就没有写入文件
            out.println(name + "|" + salary + "|"
                    + calendar.get(Calendar.YEAR) + "|"
                    + calendar.get(Calendar.MONTH + 1)+"|"+calendar.get(Calendar.DATE));
            

    System.out.println(name + "|" + salary + "|"
                    + calendar.get(Calendar.YEAR) + "|"
                    + calendar.get(Calendar.MONTH + 1)+"|"+calendar.get(Calendar.DATE));
        }
        
        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);
            hireDate=calendar.getTime();
        }
    }
    public class EmployeeMain {    /**
         * @param args
         */
        public static void main(String[] args) {
            Employee[] staff=new Employee[3];
            staff[0]=new Employee("Tom", 562.12, 2012, 3, 21);
            staff[1]=new Employee("Tony", 4568, 2012, 2, 21);
            staff[2]=new Employee("hu", 562.12, 2012, 1, 21);
            try {
                PrintWriter out=new PrintWriter("employee.txt");
                writeDate(staff, out);
                out.close();
                Scanner in=new Scanner(new FileReader("employee.txt"));
                Employee[] newStaff=readDate(in);
                in.close();
                for(Employee e : newStaff){
                    System.out.println(e);
                }
            } catch (FileNotFoundException e) {
                System.out.println("文件不存在");
            }
        }
        
        private static void writeDate(Employee[] employees,PrintWriter out){
            out.println(employees.length);
            for (Employee e:employees) {
                e.writeData(out);
            }
        }
        
        private static Employee[] readDate(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;
        }
    }
    结果:F:\javaTest>javac -d . EmployeeMain.javaF:\javaTest>java com.dreamhome.file.EmployeeMain
    Tom|562.12|2012|21|21
    Tony|4568.0|2012|16|21
    hu|562.12|2012|12|21
    com.dreamhome.file.Employee[name=Tom,salary562.12,hireDateSat Sep 21 00:00:00 CST 2013]
    com.dreamhome.file.Employee[name=Tony,salary4568.0,hireDateSun Apr 21 00:00:00 CST 2013]
    com.dreamhome.file.Employee[name=hu,salary562.12,hireDateFri Dec 21 00:00:00 CST 2012]F:\javaTest>