我有几个根据用户输入分配属性的对象。然后我将这些对象存储在一个向量中,然后将该向量写入文件,但在对存储的向量进行反序列化时,只读取第一个对象。这是我到目前为止的代码:
public Vector<Cases> registerCase() {
Vector<Cases> casesVector = new Vector<Cases>(10, 2);
Scanner myCase = new Scanner(System.in);
Scanner userChoice = new Scanner(System.in);
System.out.println("HOW MANY CASES DO YOU WANT TO REGISTER?");
int count = userChoice.nextInt();
for (int i = 0; i < count; i++) {
Cases newCase = new Cases();
System.out.println("Enter the case name: ");
newCase.caseName = myCase.nextLine();
System.out.println("Enter the client's name: ");
newCase.client = myCase.nextLine();
System.out.println("Enter the case type: ");
newCase.caseType = myCase.nextLine();
if((newCase.caseType.equals("Major")) || newCase.caseType.equals("major")){
newCase.closedCaseRevenue = majorCasePrice;
}else {
newCase.closedCaseRevenue = (int) (0.75 * majorCasePrice);
}
casesVector.add(newCase);
}
try{
// Open a file to write to, named SavedCases.sav.
FileOutputStream saveFile = new FileOutputStream("SavedCases.sav", true);
ObjectOutputStream save = new ObjectOutputStream(saveFile);
save.writeObject(casesVector);
save.close();
}
catch(Exception exc){
exc.printStackTrace();
}
Vector<Cases> comVector = new Vector<Cases>();
try{
FileInputStream saveFile = new FileInputStream("SavedCases.sav");
ObjectInputStream save = new ObjectInputStream(saveFile);
comVector = (Vector<Cases>) save.readObject();
System.out.println("The size of the vector is: " + comVector.size());
save.close(); // This also closes saveFile.
}
catch(Exception exc){
exc.printStackTrace();
}
for (Cases law_case : comVector) {
System.out.println("Name: " + law_case.caseName);
System.out.println("Client: " + law_case.client);
System.out.println("Case Type: " + law_case.caseType);
System.out.println("Case State: " + law_case.caseState);
System.out.println("Case Revenue: " + law_case.closedCaseRevenue);
System.out.println();
}
return casesVector;
}
答案 0 :(得分:1)
你的代码运行正常并打印所有注册的案例,除了我没有附加到已创建的文件(这就是你想要的,对吧?)。几个支票 -
答案 1 :(得分:1)
编辑:如果它已经存在,请附加到矢量...
使用
检查现有文件File f = new File(FileName);
if(f.exists())
/* Read in the vector from the file using an object input stream on the file */
else
/* make a new vector */
然后读入你的输入并输出它就像你在那里一样,但是当你使FileOutputStream不包含true标志时,这将导致你每次添加一个新的向量而不是仅覆盖当前向量新的,正确的。
<强> ORIGINAL 强>
问题在于您的实现是每次写入保存文件时都要附加一个新数组。因此,每当您尝试从文件中读取时,您总是会获得您制作的第一个数组。
我不确定你是否只想每次都用新的数据覆盖数组,但你应该在添加更多的情况之前读入当前数组,或者不要为FileWriter构造函数将append标志设置为true取决于您想要的结果。