如何解决如何修复线程“main”中的异常 java.io.StreamCorruptedException: invalid type code: AC
我正在做一个学校项目,它基本上允许用户创建一个学生,将该信息写入二进制文件中,显示方法将从文件中读取并显示信息。但是,第一次创建学生一切都很好,但是第二个学生却给了我以下错误:
Exception in thread "main" java.io.StreamCorruptedException: invalid type code: AC at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1743) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:519) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:477) at MidTermProject.DisplayStudent(MidTermProject.java:248) at MidTermProject.main(MidTermProject.java:353)
我读了一点,因为它试图创建一个标题,但只能写入 1 个标题,这就是它抛出错误的原因,从阅读中很清楚是什么创建了它,但没有真正清楚如何修复它,我在关于 private transient SomeClass RefVar;
的 java 书中读到能够将数据附加到文件中,想法是用户可以创建任意数量的学生,他们将被写入文件中并且能够显示所有这些,现在它只显示第一个学生,任何想法如何解决它?不胜感激,这是我的代码:
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.io.*;
import java.lang.ClassNotFoundException;
public class MidTermProject implements Serializable {
static AtomicInteger idGenerator = new AtomicInteger(0001);
static int id;
public static int getId() {
return id;
}
///CreateStudent method
public static void CreateStudent() throws IOException {
String FullName;
String address;
String city;
String state;
String newStudentID;
Scanner keyboard = new Scanner(System.in);
FileOutputStream fstream =
new FileOutputStream("StudentInfo.dat",true);
ObjectOutputStream outputFile =
new ObjectOutputStream(fstream);
id = idGenerator.getAndIncrement();
///Convert int into a String and write it to the file
String student = Integer.toString(getId());
outputFile.writeObject("Student ID: " + student);
System.out.print("\nPlease enter your information bellow.\n" + "\nFull Name: ");
FullName = keyboard.nextLine();
outputFile.writeObject("Full Name: " + FullName);
System.out.print("Address: ");
address = keyboard.nextLine();
outputFile.writeObject("Address: " + address);
System.out.print("City: ");
city = keyboard.nextLine();
outputFile.writeObject("City: " + city);
System.out.print("State: ");
state = keyboard.nextLine();
outputFile.writeObject("State: " + state);
outputFile.close();
System.out.print("\nDone\n");
}
///DisplayStudent method
public static void DisplayStudent() throws IOException {
FileInputStream fstream = new FileInputStream("StudentInfo.dat");
ObjectInputStream inputFile = new ObjectInputStream(fstream);
String student;
boolean endOfFile = false;
while(!endOfFile)
{
try
{
student = (String) inputFile.readObject();
System.out.print(student + "\n");
}
catch (EOFException | ClassNotFoundException e)
{
endOfFile = true;
}
}
System.out.println("\nDone");
inputFile.close();
}
public static void main(String[] args) throws IOException {
int start = 0;
while(start >= 0) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Here is the sample of menu choices for Main Menu.");
System.out.println("\nWelcome to University Enrollment" + "\n1. Create Student" +
"\n2. Create Course" + "\n3. Create Enrollment" + "\n4. Edit Student" + "\n5. Edit Course"
+ "\n6. Edit Enrollment" + "\n7. Display Student" + "\n8. Display Course" + "\n9. Display Enrollment"
+ "\n10. Grades Sub Menu" + "\n0. --- Quit ---");
System.out.println("Please enter a valid choice(1-10,0 to Quit) :");
int userInput = keyboard.nextInt();
if(userInput == 1) {
CreateStudent();
} else if(userInput == 2) {
CreateCourse();
} else if(userInput == 3) {
CreateEnrollment();
} else if(userInput == 4 ) {
EditStudent();
} else if(userInput == 5) {
EditCourse();
} else if(userInput == 6) {
EditEnrollment();
} else if(userInput == 7) {
DisplayStudent();
} else if(userInput == 8) {
DisplayCourse();
} else if(userInput == 9) {
DisplayEnrollment();
} else if(userInput == 10) {
GradesSubMenu();
} else if(userInput == 0) {
System.out.print("Done\n");
} else {
while(userInput > 10) {
System.out.println("Invalid Option,Please try again.");
userInput = keyboard.nextInt();
if(userInput == 1) {
CreateStudent();
} else if(userInput == 2) {
CreateCourse();
} else if(userInput == 3) {
CreateEnrollment();
} else if(userInput == 4 ) {
EditStudent();
} else if(userInput == 5) {
EditCourse();
} else if(userInput == 6) {
EditEnrollment();
} else if(userInput == 7) {
DisplayStudent();
} else if(userInput == 8) {
DisplayCourse();
} else if(userInput == 9) {
DisplayEnrollment();
} else if(userInput == 10) {
GradesSubMenu();
} else if(userInput == 0) {
System.out.print("Done\n");
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。