无法在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不符合您发布的代码。如果您希望将父类中未公开的私有变量序列化,那么当然必须使其可序列化。但在您的问题中没有披露任何内容。我添加了它,但仍然存在相同的错误?您不是我马上就来。