是在readObject的堵塞了吧。麻烦把问题描述清晰些

解决方案 »

  1.   

    不知道楼主的遇到的问题什么,List是可以一次读取的,写了示例如下:import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    public class ObjectSerlizable { public static void main(String[] args) {
    // TODO Auto-generated method stub List<Student> list = new ArrayList<Student>();
    Collections.addAll(list, 
    new Student(1,"Jack", 99,98,100),
    new Student(2,"Tom", 93,95,90),
    new Student(3,"John", 95,97,80),
            new Student(4,"Wilson", 99,91,89));
    writeObject(list);
    readObject();
    } public static void readObject() {
    try {
    FileInputStream fis = new FileInputStream("student.txt");
    ObjectInputStream ois = new ObjectInputStream(fis);;

    List<Student> list = (List<Student>) ois.readObject(); int i = 0;
    for (Student student : list) {
    System.out.print("第" + (i + 1) + "个读出的学生的学号:");
    System.out.println(student.getId());
    System.out.print("第" + (i + 1) + "个读出的学生的姓名:");
    System.out.println(student.getName());
    System.out.print("第" + (i + 1) + "个读出的学生的语文成绩:");
    System.out.println(student.getChinese());
    System.out.print("第" + (i + 1) + "个读出的学生的英语成绩:");
    System.out.println(student.getEnglish());
    System.out.print("第" + (i + 1) + "个读出的学生的数学成绩:");
    System.out.println(student.getMath());
    System.out.println("======================================");
    i++;
    }
    ois.close();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    public static void writeObject(List<Student> list) {
    try {
    FileOutputStream fos = new FileOutputStream("student.txt");
    ObjectOutputStream os = new ObjectOutputStream(fos);
    os.writeObject(list);
    os.close();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    }class Student implements Serializable{

    private int id;
    private String name;
    private float chinese;
    private float english;
    private float math;

    public Student(int id, String name, 
    float chinese, float english, float math)
    {
    this.id= id;
    this.name = name;
    this.chinese = chinese;
    this.english = english;
    this.math = math;
    }
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public float getChinese() {
    return chinese;
    }
    public void setChinese(float chinese) {
    this.chinese = chinese;
    }
    public float getEnglish() {
    return english;
    }
    public void setEnglish(float english) {
    this.english = english;
    }
    public float getMath() {
    return math;
    }
    public void setMath(float math) {
    this.math = math;
    }  
    }
    输出结果如下:
    第1个读出的学生的学号:1
    第1个读出的学生的姓名:Jack
    第1个读出的学生的语文成绩:99.0
    第1个读出的学生的英语成绩:98.0
    第1个读出的学生的数学成绩:100.0
    ======================================
    第2个读出的学生的学号:2
    第2个读出的学生的姓名:Tom
    第2个读出的学生的语文成绩:93.0
    第2个读出的学生的英语成绩:95.0
    第2个读出的学生的数学成绩:90.0
    ======================================
    第3个读出的学生的学号:3
    第3个读出的学生的姓名:John
    第3个读出的学生的语文成绩:95.0
    第3个读出的学生的英语成绩:97.0
    第3个读出的学生的数学成绩:80.0
    ======================================
    第4个读出的学生的学号:4
    第4个读出的学生的姓名:Wilson
    第4个读出的学生的语文成绩:99.0
    第4个读出的学生的英语成绩:91.0
    第4个读出的学生的数学成绩:89.0
    ======================================
      

  2.   


    是在readObject的堵塞了吧。麻烦把问题描述清晰些我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的  对象   也一起读出来。  
      

  3.   

    我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的  对象   也一起读出来。  
      

  4.   

    我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的  对象   也一起读出来。  
    上面的代码完全可以实现你想要的功能
      

  5.   

    我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的  对象   也一起读出来。  
    上面的代码完全可以实现你想要的功能我的程序是有个inputaa()函数,手动输入几个学生对象。比如我第一次执行这个程序,我已经存入了2个学生对象到文件里面。我第二次再执行这个程序的时候。我只能读出这次程序输入的学生对象。第一次执行程序保存在文件中的 那两个 学生对象。我读不到。   因为前面可以有N个 学生对象。我不知道有多少。 懂我的意思吗?     另外, 我在上面的程序做了改进。   有点小问题。  麻烦 可以帮我看一下。  程序在下面
      

  6.   

    import java.io.*;
    import java.util.*;                    //每次处理,会覆盖以前的内容。 每次运行,TXT文件会重新覆盖。  怎么处理????                    
    public class StudentTest { /**
     * @param args
     */
    public static void main(String[] args){
    // TODO Auto-generated method stub
    System.out.println("请输入学生数量");
    Scanner in = new Scanner(System.in);
    int num = in.nextInt();
    int listNum = getNum();
    List<Student> sa = new ArrayList<Student>();
    InputMethod(num,sa,in);
    writeMethod(num,sa);
    readMehod(listNum);
    }
    public static int getNum()
    {
    Properties settings = new Properties();
    int c = 0;
    try
    {
    settings.load(new FileInputStream("count.txt"));
    }
    catch(Exception e)
    {
    settings.setProperty("count", String.valueOf(0));
    }
    c = Integer.parseInt(settings.getProperty("count"))+1;
    settings.setProperty("count", Integer.toString(c));
    try
    {
    settings.store(new FileOutputStream("count.txt"), "listNum");
    }
    catch(Exception ex)
    {
    ex.printStackTrace();
    }
    return c;
    }


    public static void InputMethod(int num,List<Student> sa,Scanner in)      //输入赋值函数
    {

    for(int i=1;i<num+1;i++)
    {
    try
    {
    Student stu = new Student();
    //Scanner in = new Scanner(System.in);
    System.out.println("请输入第"+i+"个人的学号");
    stu.setId(in.nextInt());
    System.out.println("请输入第"+i+"个人的名字");
    stu.setName(in.next());
    System.out.println("请输入第"+i+"个人的语文成绩");
    stu.setChinese(in.nextFloat());
    System.out.println("请输入第"+i+"个人的英语成绩");
    stu.setEnglish(in.nextFloat());
    System.out.println("请输入第"+i+"个人的数学成绩");
    stu.setMath(in.nextFloat());
    sa.add(stu);
    }
    catch(Exception e)
    {
    e.getStackTrace();
    }
    }
    }
    public static void writeMethod(int num,List<Student> sa)        //写入 文件
    {
    try
    {
    FileOutputStream fos = new FileOutputStream("student.txt",true);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    List<Student> list = sa;
    oos.writeObject(list);
    oos.close();
    }
    catch(Exception e)
    {
    e.getStackTrace();
    }
    }
    public static void readMehod(int listNum)                                       //从文件读出 
    {
    try
    {
    FileInputStream fis = new FileInputStream("student.txt");
    ObjectInputStream ois = new ObjectInputStream(fis);
    for(int j=0;j<listNum;j++)
    {
    List<Student> sn = (List<Student>)ois.readObject();
    int i = 0;
    for(Student sb:sn)
    {
                    //System.out.println("for");
    //Student stu = (Student)sb;
    System.out.print("第"+(i+1)+"个读出的学生的学号:");
    System.out.println(sb.getId());
    System.out.print("第"+(i+1)+"个读出的学生的姓名:");
    System.out.println(sb.getName());
    System.out.print("第"+(i+1)+"个读出的学生的语文成绩:");
    System.out.println(sb.getChinese());
    System.out.print("第"+(i+1)+"个读出的学生的英语成绩:");
    System.out.println(sb.getEnglish());
    System.out.print("第"+(i+1)+"个读出的学生的数学成绩:");
    System.out.println(sb.getMath());
        i++;
    }
    }
    ois.close();
    }
    catch(Exception e)
    {
    e.getStackTrace();
    }
    }}import java.io.*;
    public class Student implements Serializable{
    private int intId;
    private String strName;
    private float fChinese;
    private float fEnglish;
    private float fMath;

    public float averageOne()
    {
    return (fChinese+fEnglish+fMath)/3;
    }
    public void setId(int intId)
    {
    this.intId = intId;
    }
    public void setName(String strName)
    {
    this.strName = strName;
    }
    public void setChinese(float fChinese)
    {
    this.fChinese = fChinese;
    }
    public void setEnglish(float fEnglish)
    {
    this.fEnglish = fEnglish;
    }
    public void setMath(float fMath)
    {
    this.fMath = fMath;
    }


    public int getId()
    {
    return intId;
    }
    public String getName()
    {
    return strName;
    }
    public float getChinese()
    {
    return fChinese;
    }
    public float getEnglish()
    {
    return fEnglish;
    }
    public float getMath()
    {
    return fMath;
    } }
      

  7.   

    我的意思是,我可能里面写了好些个Student对象进去,已经存在里面了。但是,下次运行程序的时候,将上次存进文件的  对象   也一起读出来。  
    上面的代码完全可以实现你想要的功能我的程序是有个inputaa()函数,手动输入几个学生对象。比如我第一次执行这个程序,我已经存入了2个学生对象到文件里面。我第二次再执行这个程序的时候。我只能读出这次程序输入的学生对象。第一次执行程序保存在文件中的 那两个 学生对象。我读不到。   因为前面可以有N个 学生对象。我不知道有多少。 懂我的意思吗?     另外, 我在上面的程序做了改进。   有点小问题。  麻烦 可以帮我看一下。  程序在下面
    每次存之前,都先读取出来和刚才输入的合并到一块再一次保存呗。