Catch-22序列化

时间:2014-08-03 05:46:45

标签: java serialization

我正在编写一个创建对象的程序,在ArrayList中引用,它以空ArrayList开头。用户根据他们提供的信息在运行时填充它。

我正在尝试使用标准

序列化ArrayList和构建其对象的类
try {
    FileOutputStream fs = new FileOutputStream("Foo.ser");
    ObjectOutputStream os = new ObjectOutputStream(fs);
    os.writeObject(barList);
    os.close();

    }  catch(IOException ex) {
       ex.printStackTrace();

当程序第一次运行时,文件(foo.ser)尚未创建,所以尝试使用相应的FileInputStream方法来检索状态,据我所知,会导致找不到文件异常。

我考虑使用if语句检查foo.ser,并且只在找到它时才实现FileInputStream,但文件检查的格式似乎是绝对路径。这似乎不是强大解决方案的候选者。如果您的程序在没有对象状态且没有Foo.ser的情况下启动,那么如何在Serialization上滚动?

1 个答案:

答案 0 :(得分:1)

  

我考虑使用if语句检查foo.ser,并且仅在找到它时实现FileInputStream,但文件检查的格式似乎是绝对路径。

这是不正确的。您可以使用相对路径或绝对路径检查文件是否存在。

但正如NPE指出的那样,只是尝试打开和读取文件更简单,并捕获可能发生的异常,如果失败的话。 (文件可能丢失,您可能没有读取权限,或文件可能存在但反序列化可能会失败。)