java编写:.将包含有学生学号、姓名、性别、专业、联系方式等信息的若干学生对象保存到文件stud.dat中,要求保密联系方式(即不保存),然后再读取文件中的学生信息并按学号的升序输出。
时间: 2024-03-18 07:45:42 浏览: 53
好的,我来给你提供一个Java代码的实现。
首先,我们需要定义一个学生类,包含学号、姓名、性别、专业和联系方式等属性。其中,联系方式属性我们需要保密,因此可以将其定义为私有属性,并提供一个公有方法来获取联系方式的值。
```java
import java.io.Serializable;
public class Student implements Serializable, Comparable<Student> {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private String gender;
private String major;
private transient String contact;
public Student(String id, String name, String gender, String major, String contact) {
this.id = id;
this.name = name;
this.gender = gender;
this.major = major;
this.contact = contact;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public String getMajor() {
return major;
}
public String getContact() {
return contact;
}
@Override
public int compareTo(Student o) {
return this.id.compareTo(o.id);
}
}
```
接下来,我们需要编写保存学生对象到文件的方法和读取学生对象的方法。在保存学生对象时,我们需要使用Java的序列化机制将学生对象序列化为字节流并写入文件中,这样可以方便地将学生对象保存到文件中。在读取学生对象时,我们需要使用Java的反序列化机制将字节流转换为学生对象,这样可以方便地从文件中读取学生对象。
```java
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StudentManager {
private static final String FILE_NAME = "stud.dat";
public static void saveStudents(List<Student> students) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILE_NAME))) {
for (Student student : students) {
oos.writeObject(student);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static List<Student> loadStudents() {
List<Student> students = new ArrayList<>();
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILE_NAME))) {
while (true) {
Student student = (Student) ois.readObject();
students.add(student);
}
} catch (EOFException e) {
// ignore
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return students;
}
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("1001", "张三", "男", "计算机科学与技术", "13888888888"));
students.add(new Student("1002", "李四", "女", "软件工程", "13999999999"));
students.add(new Student("1003", "王五", "男", "信息安全", "13666666666"));
saveStudents(students);
List<Student> loadedStudents = loadStudents();
Collections.sort(loadedStudents);
for (Student student : loadedStudents) {
System.out.println(student.getId() + " " + student.getName() + " " + student.getGender() + " " + student.getMajor());
}
}
}
```
在main方法中,我们先创建了三个学生对象,并将它们保存到文件中。然后,我们读取文件中的学生对象,按学号的升序进行排序,并输出学生信息(不包含联系方式)。
注意,我们在学生类中将联系方式属性定义为了transient,这意味着这个属性不会被序列化到文件中。这样做是为了保密学生的联系方式。如果你需要在程序中使用学生的联系方式,可以使用公有的getContact方法来获取联系方式的值。
阅读全文