我开始为我的类开发一个应用程序,它有一个请求,我需要从.txt文件中的列表中保存对象。它似乎正在工作,但是当我这样做时,它只保存了我输入的一个对象。我不知道解决方案是什么。我的代码如下。附:我正在使用gui将我的对象添加到列表中。
List<Korisnik> listaK=Kontroler.vratiObjekatKontroler().vratiKorisnika();
try {
FileOutputStream fos = new FileOutputStream(new File("output.txt"));
ObjectOutputStream out= new ObjectOutputStream(fos);
for (int i = 0; i < listaK.size(); i++) {
out.writeObject(listaK.get(i));
out.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
答案 0 :(得分:2)
for (int i = 0; i < listaK.size(); i++) {
out.writeObject(listaK.get(i));
out.close();
}
在编写第一个对象后,您将关闭输出流。这样你就不能把任何东西写入其中了。将out.close()
移出for
循环。
答案 1 :(得分:1)
您正在关闭for循环中的流。我建议:
FileOutputStream fos = null;
ObjectOutputStream out = null;
try {
fos = new FileOutputStream(new File("output.txt"));
out= new ObjectOutputStream(fos);
for (int i = 0; i < listaK.size(); i++) {
out.writeObject(listaK.get(i));
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (out != null) out.close;
if (fos != null) fos.close;
}
答案 2 :(得分:1)
希望您至少使用Java SE 7 :),您可以利用try-with-resources,这样您就不必关心关闭&#34;资源&#34;:
try (
FileOutputStream fos = new FileOutputStream(new File("output.txt"));
ObjectOutputStream out= new ObjectOutputStream(fos)
){
for (int i = 0; i < listaK.size(); i++) {
out.writeObject(listaK.get(i));
}
} catch (IOException ex) {
ex.printStackTrace();
}
try-with-resources 语句包含由分号分隔的FileOutputStream
和ObjectOutputStream
对象声明。当直接跟随它的代码块正常或由于异常而终止时,FileOutputStream
和ObjectOutputStream
对象的close方法将按此顺序自动调用。请注意,资源的close方法按其创建的相反顺序调用。