标题:Java中输入学生信息,传到文件中,再从文件 中读取,EOFException,invalid type code: AC解决办法
1.使用ObjectOutputStream,Student需要序列化,也就是implements Serializable接口
2.Java中实现排序的视频:添加链接描述
3.Java中scanner视频:添加链接描述
4.Java中流的视频:添加链接描述
p116,看完就会了,
完整代码:
package com.sxt.io3;
import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Test2018T {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println("输入4位同学的成绩:");
Scanner scanner = new Scanner(System.in);
int i = 1;
ObjectOutputStream oos = null;
//1.创建源 使用对象流 需要序列化
//2.选择流
oos = new ObjectOutputStream(new FileOutputStream("cx.txt",true));
while(i <= 4){
System.out.println("输入第"+ i +" 位同学的姓名:");
String name = scanner.next();
System.out.println("输入第"+ i +" 位同学的age:");
int age = scanner.nextInt();
System.out.println("输入第"+ i +" 位同学的grade:");
double grade = scanner.nextDouble();
i++;
//3.操作
oos.writeObject(new Student(name,age,grade));
oos.flush();
//4.关闭
}
oos.close();
// //1.创建源 使用对象流 需要序列化
// //2.选择流
// oos = new ObjectOutputStream(new FileOutputStream("cx.txt"));
// //3.操作
// oos.writeObject(new Student("aaa",18,500));
// oos.writeObject(new Student("bbb",18,380));
// oos.writeObject(new Student("acaa",18,560));
// oos.writeObject(new Student("aada",18,400));
// oos.flush();
// //4.关闭
// oos.close();
//读取
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("cx.txt"));
Student[] students = new Student[4];
i = 0;
// while(true){
// try{
// students[i++] = (Student) ois.readObject();
// }catch (EOFException e){
// break;
// }
// }
// ois.close();
while(i < 4){
students[i++] = (Student) ois.readObject();
}
ois.close();
for (Student student : students) {
System.out.println(student);
}
//排序
Arrays.sort(students, new Comparator<Student>() {
@Override
public int compare(Student student, Student t1) {
if(student.getGrade() > t1.getGrade()){
return -1;
}else if(student.getGrade() < t1.getGrade()){
return 1;
}
return 0;
}
});
for (Student student : students) {
System.out.println(student);
}
}
}
class Student implements Serializable {
private String name;
private int age;
private double grade;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", grade=" + grade +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getGrade() {
return grade;
}
public void setGrade(double grade) {
this.grade = grade;
}
public Student(String name, int age, double grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
排序:
scanner: