【问题标题】:Cannot write object to file in java无法在java中将对象写入文件
【发布时间】:2016-02-29 01:33:21
【问题描述】:

我有两个班:

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();
        }
    }
}

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

【问题讨论】:

  • 请给我看你写和读数据的代码?
  • 给我看你的读写文件。
  • public void readFile() throws FileNotFoundException, IOException, ClassNotFoundException { List lsttemp = new ArrayList();尝试 { System.out.println("Doc du lieu tu 文件"); ObjectInputStream obis = new ObjectInputStream(new FileInputStream("GiaoDichDat.text")); lsttemp = (List) 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(); } }
  • 你应该把它添加到你的帖子中

标签: java serialization java-io


【解决方案1】:

要使用ObjectInputStreamObjectOutputStream 读写对象,您的所有对象都需要实现Serializable,但您的父类没有这样做。

【讨论】:

  • 父类不需要实现Serializable.考虑java.lang.Object。 OP 的父类是抽象的,不包含任何状态。
  • 我不明白,当我更改它并且不再更改时,我可以看到输出数据。
  • GiaoDich 类是一个抽象类,它有很多私有变量,set/get 方法。使用这些属性的子类。
  • @Sakura1108 与您发布的代码不符。如果您希望对父类中未公开的私有变量进行序列化,那么您当然必须将其设为Serializable. 但您的问题中没有公开这些。
【解决方案2】:

看来你一定是忽略了一个抛出的异常:

fos.close();

不要关闭它。

obos.flush();

这应该导致IOException,因为之前的关闭。无论如何,您都应该删除它,因为obos.close() 无论如何都会导致flush()

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

这是您唯一需要的关闭。

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

【讨论】:

  • 我添加了它,但仍然存在错误
  • 仍然是 same 错误?你在这里不是很随和。
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 2019-03-01
相关资源
最近更新 更多