java - 如何使用 ObjectOutputStream 写入文件?
问题描述
我正在尝试写入文件,现在已将问题缩小到 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!");
}
谢谢!
解决方案
我添加了这个以使其成为一个完整的示例。
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"; }
并附加}
关闭课程。
为我工作!
推荐阅读
- r-markdown - 通过 `blogdown` 生成`bookdown site`
- applescript - applescript 可以很好地移动终端和 Finder 窗口,但不能移动 Chrome 窗口
- angular - Angular 延迟加载已弃用 - 它可用吗?
- javascript - 如果正文/背景颜色为白色,则更改链接颜色
- spring - 如何从 spring/property 文件夹中获取上传的文件
- flutter - 像 setState() 一样使用 notifyListeners()
- c - FSEventStreamCreate 的“从现在开始”的定义是什么
- python - #python 从列表中提取信息
- sqlite - 如何使用 UIPath 查询 SQLite DB?
- jquery - jquery变量中的一些问题