代码如下:想要实现system.in 来输入学生信息,然后添加到students.dat这个文件中.但object流加上后就报错了..劳驾各位了.最好能附带给个解决问题的思路...
package API;import java.io.*;public class Studentinfo {
static BufferedReader br = new BufferedReader(new InputStreamReader(
System.in));
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Student stu1 = getStudent();
/*
 * System.out.println(stu1.name);
 * System.out.println(stu1.record[0]);
 * System.out.println(stu1.record[1]);
 * System.out.println(stu1.record[2]);
 * System.out.println(stu1.record[3]);
 */
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("e:/Students.dat"));           //这里想要的功能
public static Student getStudent() throws IOException 
{
Student stu = new Student();
System.out.print("请输入姓名:");
String name = br.readLine();
stu.name = name; int score1 = -1;
do {
System.out.print("请输入国语成绩:");
String s1 = br.readLine();
try {
score1 = Integer.parseInt(s1); } catch (NumberFormatException e) {
// TODO Auto-generated catch block
System.out.print("输入错误请重新输入:");
}
} while (score1 < 0 || score1 > 100);
stu.record[0] = score1; int score2 = -1;
do {
System.out.print("请输入英语成绩:");
String s1 = br.readLine();
try {
score2 = Integer.parseInt(s1); } catch (NumberFormatException e) {
// TODO Auto-generated catch block
System.out.print("输入错误请重新输入:");
}
} while (score2 < 0 || score2 > 100);
stu.record[1] = score2; int score3 = -1;
do {
System.out.print("请输入数学成绩:");
String s1 = br.readLine();
try {
score3 = Integer.parseInt(s1); } catch (NumberFormatException e) {
// TODO Auto-generated catch block
System.out.print("输入错误请重新输入:");
}
} while (score3 < 0 || score3 > 100);
stu.record[2] = score3; int score4 = -1;
do {
System.out.print("请输入科学成绩:");
String s1 = br.readLine();
try {
score4 = Integer.parseInt(s1); } catch (NumberFormatException e) {
// TODO Auto-generated catch block
System.out.print("输入错误请重新输入:");
}
} while (score4 < 0 || score4 > 100);
stu.record[3] = score4;
stu.score();
return stu;
}
}class Student {
String name;
static int[] record = new int[4];
int total;
float avg;
String grade; public Student() { } public int getSum() {
return (record[0] + record[1] + record[2] + record[3]);
} public int avg() {
return getSum() / 4;
} public void score() {
System.out.println("姓名:" + name);
System.out.println("国语成绩:" + record[0]);
System.out.println("英语成绩:" + record[1]);
System.out.println("数学成绩:" + record[2]);
System.out.println("科学成绩:" + record[3]);
System.out.println("总分:" + getSum());
System.out.println("平均分:" + avg());
} public Student(String name, int[] record, int total, float avg, String grade) {
super();
this.name = name;
this.record = record;
this.total = total;
this.avg = avg;
this.grade = grade;
}
// 定义构造函数,getset方法,返回总分,平均分,学分方法.
// 文件名Student.dat ObjectOutputStream.
}

解决方案 »

  1.   

    在捎带问个问题,大家别嫌麻烦..嘿嘿..从学java到现在又近一个月时间了.老师教的知识点扩展点都能掌握,但是就是做题的时候太没感觉不知道如何下手,如何去分析问题.感觉自己学的知识点都用不到.. 麻烦各位朋友给点建议吧,或有没有类似方面的书籍呢?
      

  2.   

    在补充一点..简单的拿楼上这个问题来说.
    给的条件是,已知的学生类 和 学生信息 通过system.in 实现输入学生信息后 反馈信息 然后添加到dat文件中.
    这个问题如果分析的话如何入手? 劳驾给个详细的分析步骤. 老师教的太bt 我们都不了解他的思路 每次分配任务后 他都是拿现成的代码 带我们找main方法走一遍... 都不分析解决方法和思路.. 
      

  3.   

         ObjectOutputStream add的那个对象需要实现Serializable 接口(就是Student类需要实现这个接口)
      

  4.   

    不行...实现了Serializable 还是报错..
      

  5.   

    我已经改好了,不知道是不是LZ要的效果。代码如下:import java.io.*;public class Studentinfo {
        static BufferedReader br = new BufferedReader(new InputStreamReader(
                System.in));
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            try {
              Student stu1 = getStudent();
             ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("Students.bat")); //这里想要的功能
                oos.writeObject(stu1);//将对象持久化。
                ObjectInputStream rd = new ObjectInputStream(new FileInputStream("Students.txt"));
                
    Student stu2=(Student)rd.readObject();//恢复数据;
    System.out.println(stu2);

                /*
                 * System.out.println(stu1.name);
                 * System.out.println(stu1.record[0]);
                 * System.out.println(stu1.record[1]);
                 * System.out.println(stu1.record[2]);
                 * System.out.println(stu1.record[3]);
                 */
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
        }
        
        public static Student getStudent() throws IOException 
        {
            Student stu = new Student();
            System.out.print("请输入姓名:");
            String name = br.readLine();
            stu.name = name;        int score1 = -1;
            do {
                System.out.print("请输入国语成绩:");
                String s1 = br.readLine();
                try {
                    score1 = Integer.parseInt(s1);            } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                    System.out.print("输入错误请重新输入:");
                }
            } while (score1 < 0 || score1 > 100);
            stu.record[0] = score1;        int score2 = -1;
            do {
                System.out.print("请输入英语成绩:");
                String s1 = br.readLine();
                try {
                    score2 = Integer.parseInt(s1);            } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                    System.out.print("输入错误请重新输入:");
                }
            } while (score2 < 0 || score2 > 100);
            stu.record[1] = score2;        int score3 = -1;
            do {
                System.out.print("请输入数学成绩:");
                String s1 = br.readLine();
                try {
                    score3 = Integer.parseInt(s1);            } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                    System.out.print("输入错误请重新输入:");
                }
            } while (score3 < 0 || score3 > 100);
            stu.record[2] = score3;        int score4 = -1;
            do {
                System.out.print("请输入科学成绩:");
                String s1 = br.readLine();
                try {
                    score4 = Integer.parseInt(s1);            } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                    System.out.print("输入错误请重新输入:");
                }
            } while (score4 < 0 || score4 > 100);
            stu.record[3] = score4;
            stu.score();
            return stu;
        }
    }class Student implements Serializable {
        String name;
        static int[] record = new int[4];
        int total;
        float avg;
        String grade;    public Student() {    }    public int getSum() {
            return (record[0] + record[1] + record[2] + record[3]);
        }    public int avg() {
            return getSum() / 4;
        }    public void score() {
            System.out.println("姓名:" + name);
            System.out.println("国语成绩:" + record[0]);
            System.out.println("英语成绩:" + record[1]);
            System.out.println("数学成绩:" + record[2]);
            System.out.println("科学成绩:" + record[3]);
            System.out.println("总分:" + getSum());
            System.out.println("平均分:" + avg());
        }    public Student(String name, int[] record, int total, float avg, String grade) {
            super();
            this.name = name;
            this.record = record;
            this.total = total;
            this.avg = avg;
            this.grade = grade;
        }
        // 定义构造函数,getset方法,返回总分,平均分,学分方法.
        // 文件名Student.dat ObjectOutputStream.
    }
      

  6.   

     ObjectInputStream rd = new ObjectInputStream(new FileInputStream("Students.txt"));
    改成 :
     ObjectInputStream rd = new ObjectInputStream(new FileInputStream("Students.bat"));
      

  7.   


    import java.io.Serializable;public final class Student implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 1242488725373207929L;
    private String stuNo;//学号
    private String stuName;//名字
    private double stuNationalScore=0;//国语
    private double stuEngScore=0;//英语
    private double stuMathScore=0;//数学
    private double stuScienceScore=0;//科学
    public Student() {

    }
    public Student(String stuNo,String name, double stuNationalScore, double stuEngScore, double stuMathScore, double stuScienceScore) {
    setStuNo(stuNo);
    setStuName(name);
    setStuNationalScore(stuNationalScore);
    setStuEngScore(stuEngScore);
    setStuMathScore(stuMathScore);
    setStuScienceScore(stuScienceScore);
    }
    public double getStuEngScore() {
    return stuEngScore;
    }
    public void setStuEngScore(double stuEngScore) {
    this.stuEngScore = stuEngScore;
    }
    public double getStuMathScore() {
    return stuMathScore;
    }
    public void setStuMathScore(double stuMathScore) {
    this.stuMathScore = stuMathScore;
    }
    public double getStuNationalScore() {
    return stuNationalScore;
    }
    public void setStuNationalScore(double stuNationalScore) {
    this.stuNationalScore = stuNationalScore;
    }
    public String getStuNo() {
    return stuNo;
    }
    public void setStuNo(String stuNo) {
    this.stuNo = stuNo;
    }
    public double getStuScienceScore() {
    return stuScienceScore;
    }
    public void setStuScienceScore(double stuScienceScore) {
    this.stuScienceScore = stuScienceScore;
    }
    public double sumScore(){//总分
    double sum=getStuNationalScore()+getStuScienceScore()+getStuEngScore()+getStuMathScore();
    return sum;
    }
    public double avgScore(){//平均成绩

    return sumScore()/5;
    }
    public String getStuName() {
    return stuName;
    }
    public void setStuName(String strName) {
    this.stuName = strName;
    }

    }
    import java.io.BufferedReader;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.ArrayList;/**
     * 
     * @author test
     * 
     *
     */
    public class StudentInfo {
    private static FileOutputStream saveFile;
    private static FileInputStream readFile;
    private static final String FILENAME="./Student.dat";
    public static double showMessage(String message){//显示输入提示
    BufferedReader br = null;
    br=new BufferedReader(new InputStreamReader(System.in));
            double score=0;
            do {
             System.out.print(message);
             String strScore="";
             try{
              strScore = br.readLine();
             }catch(IOException ee){
             ee.printStackTrace();
             }
                try {
                 score = Double.parseDouble(strScore);            } catch (NumberFormatException e) {
                    // TODO Auto-generated catch block
                    System.out.print("输入错误请重新输入:");
                }
            } while (score < 0 || score > 100);
            return score;//返回分数
    }
    public static void saveStuObj(Student stuObj){//保存对象
    ObjectOutputStream saveObj=null;
    try{
    try{
    FileInputStream tempRead=new FileInputStream(FILENAME);
    saveFile=new FileOutputStream(FILENAME,true);//以追加方式写入对象
     saveObj=new ObjectOutputStream(saveFile){//第n次写
    //如是果要附加对象到文件后
    //必须重新定义这个方法
    protected void writeStreamHeader()
    throws IOException{}
    };
    }catch(FileNotFoundException e){ saveObj=new ObjectOutputStream(new FileOutputStream(FILENAME));//第一次写

    }
    saveObj.writeObject(stuObj);
    }catch(IOException ee){
    ee.printStackTrace();
    }
    }
    public static ArrayList<Student> readStuObj(FileInputStream file){//遍历文件中的所有对象
    ArrayList<Student> stuList= new ArrayList<Student>();
    try{
    ObjectInputStream readObj = new ObjectInputStream(file);
    Object obj=null;
    while(file.available()>0){//看文件里是否还有数据
    obj =readObj.readObject();
    if(obj instanceof Student){
    Student stu = (Student)obj;
    stuList.add(stu);
    }
    }
    return stuList;
    }catch(Exception ee){
    ee.printStackTrace();
    }
    return null;

    }
    public static Student readStuData(){//根据键盘的信息得到整个对象
    BufferedReader br = null;
    br=new BufferedReader(new InputStreamReader(System.in));
    Student stuObj = new Student();
    System.out.print("请输入姓名:");
    try{
    String strName = br.readLine();
    stuObj.setStuName(strName);
    }catch(IOException ee){
    ee.printStackTrace();
    }
    /********************************/
    double nationalScore=showMessage("请输入国语成绩:");
    double engScore= showMessage("请输入英语成绩:");
    double matchScore= showMessage("请输入数学成绩:");
    double scienceScore=showMessage("请输入科学成绩:");
    stuObj.setStuNationalScore(nationalScore);
    stuObj.setStuEngScore(engScore);
    stuObj.setStuMathScore(matchScore);
    stuObj.setStuScienceScore(scienceScore);
    /********************************/
    double sum =stuObj.sumScore();
    System.out.println("总分:"+sum);
    double avg = stuObj.avgScore();
    System.out.println("平均成绩:"+avg); return stuObj;


    }
    public static void main(String[] args) {
    Student stuObj=null;
    stuObj=readStuData();//根据键盘的信息得到整个对象
    /**********保存对象**********************/
    try{

    saveStuObj(stuObj);//保存对象
    System.out.println("保存成功");

    }catch(Exception ee){
    ee.printStackTrace();
    }
    /*************读取对象*******************/
    try{
    readFile = new FileInputStream(FILENAME);
    ArrayList<Student> stuList=readStuObj(readFile);
    for(Student tempStu:stuList){
    System.out.println("*********************");
    System.out.println("姓名:"+tempStu.getStuName()+": ");
    System.out.println("总分:"+tempStu.sumScore()+"  ");
    System.out.println("平均成绩:"+tempStu.avgScore());

    }
    }catch(Exception ee){
    ee.printStackTrace();
    }
    /***************************************/
    }}
    *********************
    姓名:89: 
    总分:267.0  
    平均成绩:53.4
    *********************
    姓名:wang: 
    总分:260.0  
    平均成绩:52.0
    *********************
    姓名:Li: 
    总分:291.0  
    平均成绩:58.2
      

  8.   

        有什么疑问请留言,发的代码这都调试过了
         用ObjectOutputStream写对象分两种形式:追加和替换(要分别对待)