下面是一个使用缓存实现对文本文件进行读写操作的Java程序示例,其中包括学生类和各种操作。
import java.io.*;
import java.util.HashMap;
import java.util.Map;
class Student implements Serializable {
private String name;
private String gender;
private int age;
public Student(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Name: " + name + ", Gender: " + gender + ", Age: " + age;
}
}
class StudentFileCache {
private Map<Integer, Student> cache;
private String filePath;
public StudentFileCache(String filePath) {
this.filePath = filePath;
cache = new HashMap<>();
loadCache();
}
public void addStudent(int position, Student student) {
cache.put(position, student);
saveCache();
}
public Student getStudent(int position) {
return cache.get(position);
}
public void deleteStudent(int position) {
cache.remove(position);
saveCache();
}
public void updateStudent(int position, Student updatedStudent) {
cache.put(position, updatedStudent);
saveCache();
}
public void insertStudent(int position, Student student) {
Map<Integer, Student> updatedCache = new HashMap<>();
for (Map.Entry<Integer, Student> entry : cache.entrySet()) {
int key = entry.getKey();
if (key >= position) {
updatedCache.put(key + 1, entry.getValue());
} else {
updatedCache.put(key, entry.getValue());
}
}
updatedCache.put(position, student);
cache = updatedCache;
saveCache();
}
private void loadCache() {
try {
FileInputStream fileInputStream = new FileInputStream(filePath);
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
cache = (HashMap<Integer, Student>) objectInputStream.readObject();
objectInputStream.close();
fileInputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
private void saveCache() {
try {
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(cache);
objectOutputStream.close();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Main {
public static void main(String[] args) {
String filePath = "students_cache.txt";
StudentFileCache fileCache = new StudentFileCache(filePath);
// Add students
Student student1 = new Student("Alice", "Female", 20);
Student student2 = new Student("Bob", "Male", 21);
Student student3 = new Student("Charlie", "Male", 19);
fileCache.addStudent(1, student1);
fileCache.addStudent(2, student2);
fileCache.addStudent(3, student3);
// Get student at position 2
Student retrievedStudent = fileCache.getStudent(2);
System.out.println("Retrieved student: " + retrievedStudent);
// Update student at position 2
Student updatedStudent = new Student("Bob", "Male", 22);
fileCache.updateStudent(2, updatedStudent);
// Delete student at position 1
fileCache.deleteStudent(1);
// Insert new student at position 2
Student newStudent = new Student("Eve", "Female", 18);
fileCache.insertStudent(2, newStudent);
// Get all students
for (int i = 1; i <= fileCache.getStudentCount(); i++) {
Student student = fileCache.getStudent(i);
System.out.println("Position " + i + ": " + student);
}
}
}
上述代码中,创建了一个Main类,并在main方法中展示了如何使用StudentFileCache类来进行学生信息的读写操作。我们首先创建一个文件缓存对象fileCache,并使用addStudent方法添加了几个学生对象到指定的位置。然后,我们展示了如何使用getStudent方法来获取指定位置的学生信息,并使用updateStudent方法更新指定位置的学生信息。接着,我们使用deleteStudent方法删除指定位置的学生信息,并使用insertStudent方法在指定位置插入新的学生信息。最后,我们展示了如何遍历所有学生信息并打印出来。
请注意,在运行代码之前,请确保目标文件students_cache.txt已存在或有可写权限。
求求帮忙啊啊啊啊!很紧急!!