无法将对象写入 java 中的文件
Cannot write object to file in java
我有两个class:
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();
}
}
}
我从终端读取数据后,写入文件就可以了。但是当我再次阅读时。它没有数据。
要使用 ObjectInputStream
和 ObjectOutputStream
读写对象,您的所有对象都需要实现 Serializable
但您的父对象 class 没有实现。
看来您一定是忽略了抛出的异常:
fos.close();
不要关闭它。
obos.flush();
由于之前的关闭,这应该会导致 IOException
。在任何情况下你都应该删除它,因为 obos.close()
无论如何都会导致 flush()
。
System.out.println("Ghi du lieu thanh cong");
obos.close();
这是您唯一需要的关闭。
在这些方法中捕获 IOException
没有意义,因为它们已经被声明为抛出它,并且调用者需要知道任何异常。删除捕获块。
我有两个class:
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();
}
}
}
我从终端读取数据后,写入文件就可以了。但是当我再次阅读时。它没有数据。
要使用 ObjectInputStream
和 ObjectOutputStream
读写对象,您的所有对象都需要实现 Serializable
但您的父对象 class 没有实现。
看来您一定是忽略了抛出的异常:
fos.close();
不要关闭它。
obos.flush();
由于之前的关闭,这应该会导致 IOException
。在任何情况下你都应该删除它,因为 obos.close()
无论如何都会导致 flush()
。
System.out.println("Ghi du lieu thanh cong");
obos.close();
这是您唯一需要的关闭。
在这些方法中捕获 IOException
没有意义,因为它们已经被声明为抛出它,并且调用者需要知道任何异常。删除捕获块。