Java 使用ArrayList将对象附加到文件
我正在尝试学习如何使用数组列表将对象写入文件,但是,当我重新启动程序时,文件会被覆盖,数据也不会被保留:Java 使用ArrayList将对象附加到文件,java,Java,我正在尝试学习如何使用数组列表将对象写入文件,但是,当我重新启动程序时,文件会被覆盖,数据也不会被保留: 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 re
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");
}
}
static void writeDVDs(ArrayList DVD)引发异常{
试一试{
布尔追加=真;
FileOutputStream FileOutputStream=新的FileOutputStream(“DVDCollection.dat”,append);
ObjectOutputStream ObjectOutputStream=新的ObjectOutputStream(fileOutputStream);
对于(int i=0;i
不,没有
写入FileOutputStream
后,您的编码缺少关闭文件输出流的部分。根据您的上下文,这可能会使事情处于非常不一致的状态
当然,使用Java7时,您只需简单地转到即可自动关闭流!提示:System.out.println(“无法将数据写入文件”)
基本上丢弃了确切问题的所有细节。您也想打印异常本身
但除此之外,还有一个概念上的问题。您的代码正在执行的操作:
- 填充数组列表对象
- 打开要追加的文件
- 正在将对象写入该文件。。。一个接一个
- 您的方法首先读取当前存储在文件中的列表
- 然后将新对象添加到该列表中
- 然后再次将该列表写入文件(但在覆盖模式下,不追加)
FileOutputStream
后,您的编码缺少关闭文件输出流的部分。根据您的上下文,这可能会使事情处于非常不一致的状态
当然,使用Java7时,您只需简单地转到即可自动关闭流!提示:System.out.println(“无法将数据写入文件”)
基本上丢弃了确切问题的所有细节。您也想打印异常本身
但除此之外,还有一个概念上的问题。您的代码正在执行的操作:
- 填充数组列表对象
- 打开要追加的文件
- 正在将对象写入该文件。。。一个接一个
- 您的方法首先读取当前存储在文件中的列表
- 然后将新对象添加到该列表中
- 然后再次将该列表写入文件(但在覆盖模式下,不追加)
长话短说:你可能应该退后一步,决定你的需求到底是什么;以及如何以干净的方式到达那里 我再次更新了我的答案;欢迎提供一些反馈……只需写下完整的清单。您不需要迭代它。但是,如果不采取特殊措施,就无法附加到对象流。感谢反馈,我并不声称自己擅长编程,但这是def帮助。我再次更新了我的答案;欢迎提供一些反馈……只需写下完整的清单。您不需要迭代它。但是,如果不采取特殊措施,就无法附加到对象流。感谢反馈,我并不声称自己擅长编程,但这是def helpingSorry,这是我的第一篇文章,该项目的原因是允许用户创建DVD列表,存储所述列表并编辑列表。另外,我是一个刚开始编程的学生,我只有不到6个月的经验,这不是问题。但是,当新手问问题时,通常会出现问题。因此,在这里提出一个问题并离开几个小时并不是件好事……对不起,这是我的第一篇帖子,该项目的目的是允许用户创建DVD列表,存储所述列表并编辑列表。另外,我是一个刚开始编程的学生,我只有不到6个月的经验,这不是问题。但是,当新手问问题时,通常会出现问题。因此,在这里提出一个问题,然后离开几个小时,这并不是一件好事。。。