【问题标题】:How to write a file using ObjectOutputStream?如何使用 ObjectOutputStream 写入文件?
【发布时间】:2019-09-13 03:34:03
【问题描述】:

我正在尝试写入文件,现在已将问题缩小到 writeObject() 方法。

它没有将数据写入文件。

当我运行 oos.writeObject(siteData) 时,没有任何反应。文件为空

正如您在下面的代码中看到的,我已经放入了一些 System.out.println(),它们都返回一个完整列表

我也一直在调试器中一步步查看,后面的程序没有被覆盖。

我还确保 SiteData 实现了 Serializable

什么会导致这个问题?

public void saveToStorageFile() throws IOException {

       System.out.println("saveToStorageStart() started!");

       FileOutputStream fos = new FileOutputStream(new File("SiteDataStorage"));
       ObjectOutputStream oos = new ObjectOutputStream(fos);

       //Prints the List
       for(int i = 0 ; i < this.size(); i++) {
           System.out.println("Save list:" + this.db.get(i).getText());
       }

       SiteData[] siteData = db.toArray(new SiteData[db.size()]);

       //Prints the sitedata array length
       System.out.println(siteData.length);

       oos.writeObject(siteData);
       oos.close();

       System.out.println("Saved!");
   }

谢谢!

【问题讨论】:

  • @Gustavo 关闭流将隐式刷新它。
  • 感谢提示,但文件仍为空
  • 您确定您查看的是正确的文件吗?尝试使用绝对路径。
  • 你在装箱更多new FileOutputStream(new File("SiteDataStorage"));吗?每次您这样做时,文件的旧内容都会被删除。也许您想通过new FileOutputStream(new File("SiteDataStorage"), true); 将其设置为附加模式?
  • 无论如何要获得不涉及猜测的适当帮助,请提供minimal reproducible example(又名SSCCE),以便我们可以在我们的机器上重现此问题并对其进行调试。

标签: java file file-io fileoutputstream


【解决方案1】:

我添加了这个以使其成为一个完整的示例。

import java.io.*;
import java.util.*;

class SiteData implements Serializable {
    public static void main(String[] args) throws Throwable {
        new SiteData().saveToStorageFile();
    }
    private int size() { return 1; } // Did you not want db?
    private List<SiteData> db = List.of(this);
    private String getText() { return "Some text"; }

并附加} 以关闭课程。

为我工作!

【讨论】:

  • 我得到一个编译错误:(SiteData) 的方法是未定义的类型列表
  • @TheJW 如果您出于某种原因仍在使用 Java SE 8,请将其替换为 Arrays.asList
  • 奇怪,我的文件是空的。也许更新 java 会有所帮助?
猜你喜欢
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 2020-12-29
  • 2015-08-02
  • 2013-12-14
  • 2016-05-31
  • 2014-04-18
  • 2019-02-18
相关资源
最近更新 更多