Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在java中将对象写入文件_Java_Serialization_Java Io - Fatal编程技术网

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

无法在java中将对象写入文件,java,serialization,java-io,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

我有两门课:

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();
        }
    }
}
公共抽象类GiaoDich{
//变量和set/get方法
公开摘要双重计算货币();
}
公共类GiaoDichDat扩展了GiaoDich实现了可序列化{
public static List listGiaoDichDat=new ArrayList();
//新价值
@凌驾
公共双计算器货币(){
}
public void getDatafromKeyboard(){
//从键盘获取数据
}
公共双平均货币(){
}
public void readFile()抛出FileNotFoundException、IOException、ClassNotFoundException
{
List lstemp=new ArrayList();
尝试
{
System.out.println(“文档文件”);
ObjectInputStream obis=新ObjectInputStream(新文件输入流(“GiaoDichDat.text”);
lstemp=(List)obis.readObject();
obis.close();
}
捕获(IOEX异常)
{
例如printStackTrace();
}
for(GiaoDichDat get:lstemp)
{
System.out.println(get.toString());
}
}
public void saveFile()引发FileNotFoundException,IOException
{
尝试
{
FileOutputStream fos=新的FileOutputStream(“GiaoDichDat.text”);
ObjectOutputStream obos=新的ObjectOutputStream(fos);
obos.writeObject(listGiaoDichDat);
fos.close();
obos.flush();
系统输出打印(Ghi du Liu thanh cong);
obos.close();
}
捕获(IOEX异常)
{
例如printStackTrace();
}
}
}

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

要使用
ObjectInputStream
ObjectOutputStream
读取和写入对象,所有对象都需要实现
可序列化
,但您的父类无法实现。

似乎您必须忽略引发的异常:

fos.close();
别关上这个

obos.flush();
由于之前的关闭,这应该会导致
IOException
。在任何情况下,您都应该删除它,因为不管怎样,
obos.close()
都会导致
flush()

System.out.println("Ghi du lieu thanh cong");
obos.close();
这是你唯一需要的接近


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

请向我显示您写入和读取数据的代码?向我显示您的写入和读取文件。public void readFile()抛出FileNotFoundException、IOException、ClassNotFoundException{List lstemp=new ArrayList();尝试{System.out.println(“Doc du lieu tu file”);ObjectInputStream obis=new ObjectInputStream(新文件输入流(“GiaoDichDat.text”);lstemp=(List)obis.readObject();obis.close();}catch(IOException ex){ex.printStackTrace();}for(GiaoDichDat get:lstemp){System.out.println(get.toString());}}public void saveFile()抛出FileNotFoundException,IOException{try{FileOutputStream fos=newfileoutputstream(“GiaoDichDat.text”);ObjectOutputStream obos=newobjectoutputstream(fos);obos.writeObject(listGiaoDichDat);fos.close();obos.flush();System.out.println(“Ghi du liu thanh cong”);obos.close();}catch(IOException ex){ex.printStackTrace();}你应该把它添加到你的帖子中,父类不需要实现<代码>序列化。<代码>考虑<代码> java .Lang.Objor < /Cord>。OP的父类是抽象的,不包含状态。我不理解,当我改变它并且没有变化时,我可以看到输出数据。Gaodic类是一个抽象类,它有很多私有变量。able,set/get方法。使用这些属性的子类。@Sakura1108不符合您发布的代码。如果您希望将父类中未公开的私有变量序列化,那么当然必须使其可序列化。但在您的问题中没有披露任何内容。我添加了它,但仍然存在相同的错误?您不是我马上就来。