无法在java中将对象写入文件

时间:2015-11-26 04:09:29

标签: java serialization java-io

我有两节课:

public abstract class GiaoDich{
 //variable and set/get method
    public abstract double calcualteMoney();
}

public class GiaoDichDat extends GiaoDich implements Serializable {
    public static List<GiaoDichDat> listGiaoDichDat = new ArrayList<>();
        //new value
    @Override
    public double calculatorMoney() {
    }

    public void getDatafromKeyboard() {
        //get data from keyboard
    }

    public double avgMoney() {
    }

    public void readFile() throws FileNotFoundException, IOException, ClassNotFoundException
    {
        List<GiaoDichDat> lsttemp = new ArrayList<GiaoDichDat>();
        try
        {
            System.out.println("Doc du lieu tu file");
            ObjectInputStream obis = new ObjectInputStream(new FileInputStream( "GiaoDichDat.text"));
            lsttemp = (List<GiaoDichDat>) obis.readObject();
            obis.close();
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        for (GiaoDichDat get : lsttemp)
        {
            System.out.println(get.toString());
        }
    }

    public void saveFile() throws FileNotFoundException, IOException
    {
        try
        {
            FileOutputStream fos = new FileOutputStream("GiaoDichDat.text");
            ObjectOutputStream obos = new ObjectOutputStream(fos);
            obos.writeObject(listGiaoDichDat);
            fos.close();
            obos.flush();
            System.out.println("Ghi du lieu thanh cong");
            obos.close();
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
    }
}

从终端读取数据后,我写入文件就可以了。但是当我再读一次。它没有数据。

2 个答案:

答案 0 :(得分:0)

要使用ObjectInputStreamObjectOutputStream读取和写入对象,所有对象都需要实现Serializable,但您的父类无法执行此操作。

答案 1 :(得分:-1)

您似乎必须忽略抛出的异常:

fos.close();

不要关闭它。

obos.flush();

由于事先关闭,这应该导致IOException。在任何情况下都应将其删除,因为obos.close()无论如何会导致flush()

System.out.println("Ghi du lieu thanh cong");
obos.close();

这是你唯一需要的。

在这些方法中捕获IOException没有意义,因为它们已被声明为抛出它,并且调用者需要知道任何异常。删除捕获块。