Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ArrayList将对象附加到文件_Java - Fatal编程技术网

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(“无法将数据写入文件”)
基本上丢弃了确切问题的所有细节。您也想打印异常本身

但除此之外,还有一个概念上的问题。您的代码正在执行的操作:

  • 填充数组列表对象
  • 打开要追加的文件
  • 正在将对象写入该文件。。。一个接一个
这是可行的;但这并不是很好。你看,;为了读回这些值,您如何知道文件中有多少条目

我建议只编写完整的list对象本身。但当然,这需要对整个解决方案进行返工,例如:

  • 您的方法首先读取当前存储在文件中的列表
  • 然后将新对象添加到该列表中
  • 然后再次将该列表写入文件(但在覆盖模式下,不追加)
长话短说:你可能应该退后一步,决定你的需求到底是什么;以及如何以干净的方式到达那里

不,没有

写入
FileOutputStream
后,您的编码缺少关闭文件输出流的部分。根据您的上下文,这可能会使事情处于非常不一致的状态

当然,使用Java7时,您只需简单地转到即可自动关闭流!提示:
System.out.println(“无法将数据写入文件”)
基本上丢弃了确切问题的所有细节。您也想打印异常本身

但除此之外,还有一个概念上的问题。您的代码正在执行的操作:

  • 填充数组列表对象
  • 打开要追加的文件
  • 正在将对象写入该文件。。。一个接一个
这是可行的;但这并不是很好。你看,;为了读回这些值,您如何知道文件中有多少条目

我建议只编写完整的list对象本身。但当然,这需要对整个解决方案进行返工,例如:

  • 您的方法首先读取当前存储在文件中的列表
  • 然后将新对象添加到该列表中
  • 然后再次将该列表写入文件(但在覆盖模式下,不追加)

长话短说:你可能应该退后一步,决定你的需求到底是什么;以及如何以干净的方式到达那里

我再次更新了我的答案;欢迎提供一些反馈……只需写下完整的清单。您不需要迭代它。但是,如果不采取特殊措施,就无法附加到对象流。感谢反馈,我并不声称自己擅长编程,但这是def帮助。我再次更新了我的答案;欢迎提供一些反馈……只需写下完整的清单。您不需要迭代它。但是,如果不采取特殊措施,就无法附加到对象流。感谢反馈,我并不声称自己擅长编程,但这是def helpingSorry,这是我的第一篇文章,该项目的原因是允许用户创建DVD列表,存储所述列表并编辑列表。另外,我是一个刚开始编程的学生,我只有不到6个月的经验,这不是问题。但是,当新手问问题时,通常会出现问题。因此,在这里提出一个问题并离开几个小时并不是件好事……对不起,这是我的第一篇帖子,该项目的目的是允许用户创建DVD列表,存储所述列表并编辑列表。另外,我是一个刚开始编程的学生,我只有不到6个月的经验,这不是问题。但是,当新手问问题时,通常会出现问题。因此,在这里提出一个问题,然后离开几个小时,这并不是一件好事。。。