使用java.io只在文本文件中保存一个对象

时间:2014-03-25 19:55:30

标签: java list object java-io

我开始为我的类开发一个应用程序,它有一个请求,我需要从.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();
        }

3 个答案:

答案 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 语句包含由分号分隔的FileOutputStreamObjectOutputStream对象声明。当直接跟随它的代码块正常或由于异常而终止时,FileOutputStreamObjectOutputStream对象的close方法将按此顺序自动调用。请注意,资源的close方法按其创建的相反顺序调用。