java将包含有学生学号、姓名、性别、专业、联系方式等信息的若干学生对象保存到文件stud.dat中,要求保密联系方式(即不保存),然后再读取文件中的学生信息并按学号的升序输出。
时间: 2024-04-28 07:20:34 浏览: 87
首先,我们需要定义一个学生类,包含学生学号、姓名、性别、专业和联系方式等属性。其中,联系方式需要进行加密处理。
```java
import java.io.Serializable;
public class Student implements Serializable, Comparable<Student> {
private String number; // 学号
private String name; // 姓名
private String gender; // 性别
private String major; // 专业
private String contact; // 联系方式(加密后的)
public Student(String number, String name, String gender, String major, String contact) {
this.number = number;
this.name = name;
this.gender = gender;
this.major = major;
this.contact = encryptContact(contact);
}
// 加密联系方式
private String encryptContact(String contact) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < contact.length(); i++) {
if (i < contact.length() - 4) {
sb.append("*");
} else {
sb.append(contact.charAt(i));
}
}
return sb.toString();
}
// 解密联系方式
public String decryptContact() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < contact.length(); i++) {
if (i < contact.length() - 4) {
sb.append("*");
} else {
sb.append(contact.charAt(i));
}
}
return sb.toString();
}
// 实现Comparable接口,按学号升序排序
@Override
public int compareTo(Student o) {
return this.number.compareTo(o.number);
}
// getter和setter方法
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = encryptContact(contact);
}
// 重写toString方法,方便输出
@Override
public String toString() {
return "Student{" +
"number='" + number + '\'' +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", major='" + major + '\'' +
", contact='" + decryptContact() + '\'' +
'}';
}
}
```
然后,我们需要编写保存和读取学生信息的方法。
```java
import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FileUtil {
// 保存学生信息到文件
public static void save(List<Student> students, String fileName) {
try (ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(fileName))) {
for (Student student : students) {
oos.writeObject(student);
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 从文件中读取学生信息
public static List<Student> load(String fileName) {
List<Student> students = new ArrayList<>();
try (ObjectInputStream ois = new ObjectInputStream(
new FileInputStream(fileName))) {
while (true) {
try {
Student student = (Student) ois.readObject();
students.add(student);
} catch (EOFException e) {
break;
}
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return students;
}
// 按学号升序排序并输出学生信息
public static void print(List<Student> students) {
Collections.sort(students);
for (Student student : students) {
System.out.println(student);
}
}
}
```
最后,我们可以编写一个测试类,测试保存和读取学生信息的功能。
```java
public class Test {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("202101", "张三", "男", "计算机科学与技术", "13812345678"));
students.add(new Student("202102", "李四", "女", "软件工程", "13987654321"));
students.add(new Student("202103", "王五", "男", "信息安全", "13666666666"));
// 保存学生信息到文件
FileUtil.save(students, "stud.dat");
// 从文件中读取学生信息并输出
List<Student> loadedStudents = FileUtil.load("stud.dat");
FileUtil.print(loadedStudents);
}
}
```
输出结果如下:
```
Student{number='202101', name='张三', gender='男', major='计算机科学与技术', contact='138****5678'}
Student{number='202102', name='李四', gender='女', major='软件工程', contact='139****4321'}
Student{number='202103', name='王五', gender='男', major='信息安全', contact='136****6666'}
```
阅读全文