我试图学习如何使用数组列表将对象写入文件,但是,当我重新启动程序时,文件会被覆盖并且数据不会被保存:
System.out.println("Enter DVD title: ");
String title = inputScanner.nextLine();
System.out.println("Enter main actor: ");
String actor = inputScanner.nextLine();
System.out.println("Enter DVD's release year: ");
String yearOfRelease = inputScanner.nextLine();
newDVD = new DVD(title, actor, yearOfRelease);
System.out.println("Entered DVD details: ");
DVDCollection.add(newDVD);
writeDVDs(DVDCollection);
break;
上面的代码从用户获取输入并将其存储在ArrayList中。
当我重新启动程序时,它似乎擦除了所有内容。
static void writeDVDs(ArrayList<DVD> DVDs) throws Exception {
try {
Boolean append = true;
FileOutputStream fileOutputStream = new FileOutputStream("DVDCollection.dat", append);
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
for (int i = 0; i < DVDs.size(); i++){
DVD theDVD = DVDs.get(i);
objectOutputStream.writeObject(theDVD);
System.out.println("DVD successfully saved");
}
}
catch (Exception e){
System.out.println("Cant write data to file");
}
}
答案 0 :(得分:2)
不,它没有。
写入后,您的编码缺少关闭 FileOutputStream
部分。根据您的上下文,这可能会使事情处于非常不一致的状态。
当然,使用Java7,您只需转到try-with-resources即可自动关闭流!并提示:System.out.println("Cant write data to file")
基本上抛弃了确切问题的所有详细信息。您也想打印异常本身!
但除此之外,还有一个概念问题。你的代码在做什么:
有效;但并不是很好。你看;为了读回这些值 - 您如何知道文件中有多少条目?
我宁愿建议简单地编写完整的列表对象本身。但当然,这需要重新设计整体解决方案 - 例如:
长话短说:你应该退后一步,决定你的要求是什么;以及如何以干净的方式到达那里。