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