Java对象输入输出流及比较器

题目描述:

1、采用对象输入输出流
2、自定义文件,存放某班级学生期末各科考试原始成绩
3、读取上述原始成绩文件,采用比较器按照某门课程分数高低排序

代码实现如下所示

package testOne;
import java.io.Serializable;
public class Student implements Serializable{
	private String Sid;
	private String Sname;
	private String Cname;
	private int Grade;
	
	public Student(String sid, String sname, String cname, int grade) {
		super();
		Sid = sid;
		Sname = sname;
		Cname = cname;
		Grade = grade;
	}
	public String getSid() {
		return Sid;
	}
	public void setSid(String sid) {
		Sid = sid;
	}
	public String getSname() {
		return Sname;
	}
	public void setSname(String sname) {
		Sname = sname;
	}
	public String getCname() {
		return Cname;
	}
	public void setCname(String cname) {
		Cname = cname;
	}
	public int getGrade() {
		return Grade;
	}
	public void setGrade(int grade) {
		Grade = grade;
	}
	@Override
	public String toString() {
		return "[学号=" + Sid + ", 姓名=" + Sname + ", 课程=" + Cname + ", 成绩=" + Grade + "]";
	}
	
}




package testOne;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class FileUtil {

	public void saveStudent(ArrayList<Student>students) {
		try (ObjectOutputStream obs=new ObjectOutputStream(new FileOutputStream("Student.txt",true))){
			for(Student stu:students) {
				if(stu!=null) {
					obs.writeObject(stu);
					obs.flush();
				}
			}
			
			 obs.writeObject(null);
			 obs.flush();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}
	
	public ArrayList<Student> readStudent(){
		ArrayList<Student>students1=new ArrayList<>();
		try (ObjectInputStream ois=new ObjectInputStream(new FileInputStream("Student.txt"))){
			Student student;
			while((student=(Student) ois.readObject())!=null) {
			students1.add(student);
		       
			}
		
				
			
			ois.close();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return students1;
	}

}



package testOne;

import java.util.ArrayList;
import java.util.Comparator;

public class Test {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		 FileUtil fileUtil1=new FileUtil();
		 ArrayList<Student>students=new ArrayList<>(); 
		 System.out.println("开始存学生信息");
		 for(int i=0;i<10;i++) {
		     if(i%2==0) { 
		    	 students.add(new Student("1210"+i, "张"+i, "java程序设计", 70+2*i));
		 } else {
			 students.add(new Student("3211"+i, "张"+i, "java程序设计", 70-i));
			 }
		 
		 } 
		 fileUtil1.saveStudent(students);
		 for(Student stu:students) {
		 System.out.println(stu); } System.out.println("根据成绩排序");
		 
		FileUtil fileUtil2=new FileUtil();
		ArrayList<Student>students2=fileUtil2.readStudent();
		students2.sort(new Comparator<Student>() {
			public int compare(Student stu1,Student stu2) {
				int num=-(stu1.getGrade()-stu2.getGrade());
				int num1=num==0?stu1.getSname().compareTo(stu2.getSname()):num;
				return num1;
			}
		});
		int count=0,j=1;
		for(Student stu1:students2) {
			if(stu1.getGrade()<70) {
				count++;
			}
			System.out.println("学生"+j+stu1);
			j++;
		}
		System.out.println("有"+count+"名学生成绩低于70分");
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值