java 。如果文件存在则尝试反序列化。否则就不要

标签 java serialization try-catch filenotfoundexception

我正在使用序列化为我的图书馆管理应用程序获取持久存储(我知道这不是正确的方式,但这是我的教授想要的方式)。

我在 main() 中使用以下代码;

    controlador.getBiblioteca().getGestorMaterial().setListaLibros((Modelo.ColeccionLibros) controlador.getSerializador().abrirArchivo("libros.dat"));

我的 Serializador 类具有 abrirArchivo("FileName.dat") 函数(英文为 openFile)。

该函数如下所示:

public Object abrirArchivo(String nombreDelArchivo) {
    Object retorno = null;
    try {
        lectorArchivos = new ObjectInputStream(new FileInputStream(
                nombreDelArchivo));
        retorno = lectorArchivos.readObject();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    return retorno;
}

现在我试图检查程序是否为任何文件获取 FileNotFoundException。如果是这样,它不应该反序列化该文件并转到下一个文件:这仅意味着我的图书馆中还没有书。

问题是,如果该行运行,它似乎使用 setListaLibros() 将我的图书列表设置为 null。每当我尝试访问该列表时,我都会收到 NullPointerException。不过,该列表已经初始化为空列表,因此只要找不到“libros.dat”文件,我只需将其保留即可。

完成该任务的正确方法是什么?

最佳答案

不知道我是否理解好这个问题。但是,正如我在您的代码中看到的,当发生 FileNotFoundException 异常时,“retorno”将保持为 null。这就是为什么你得到 setListaLibros(null) 的原因。 然后你的列表将变为空。如果您不希望出现这种行为,则应该使用空列表而不是 null 来初始化“retorno”。

关于 java 。如果文件存在则尝试反序列化。否则就不要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39137407/

相关文章:

java - Spark中JavaRDD分区之间如何共享数据?

c# - Protobuf-net Serializing Parent Class inherited object property 标记为 [ProtoIgnore()] throwing "No serializer defined for type: System.Object"

java - 交替多次try catch处理异常

python - 仅捕获 Python 中的一些运行时错误

Java ArrayList 空指针异常

java - 使用 SSL 证书触发器运行 Tomcat 服务器无法找到或加载主类 cert.pkcs12

java - GridLayout 与尺寸不成比例

java - 一个应用程序中有多个 Spring @Transactional 注释?

java - 捕获 InputMismatchException 不会返回消息

java - 为什么 Java Thread 会扭曲控制台的打印