Java 如何将对象写入文件并在程序关闭后保留它?
How to write objects to file and retain it even after the program is closed in Java?
我正在制作一个智能 ATM 项目,用户也可以在其中创建一个帐户,因此我需要将数据存储到文件中。我尝试使用序列化方法并将 User class 的对象写入序列化文件。但问题是,每当我重新启动程序时,数据库都会被重写(Over Written)。
如果不使用 SQL 等任何其他方法,我有办法解决这个问题。我的意思是我现在想坚持使用序列化,因为我还不熟悉其他方法。
public void addUserToDatabase() {
String fileName = System.getProperty("user.home")+"/accounts.txt";
try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(int i =0; i<numberOfUser; i++) {
oos.writeObject(u[i]);
}
fos.close();
oos.close();
}
catch(Exception e) {
System.out.println("UNABLE TO ADD USER TO DATABASE!");
}
}
public void fileInputStreamMethod() throws Exception
{
String fileName = System.getProperty("user.home")+"/aas.txt";
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream dos = new DataOutputStream(fos);
int i=12;
dos.writeInt(i);
dos.close();
FileInputStream fis = new FileInputStream(fileName);
DataInputStream dis = new DataInputStream(fis);
int factorial=dis.readInt();
System.out.println("The No. YOu entered is "+factorial);
dis.close();
}
您对数据库的读取和对数据库的写入需要对称——如果您使用 ObjectOutputStream 写出对象,然后要读回,您必须使用 objects 读回一个对象输入流。当您使用 ObjectOutputStream 写出时您不会这样做,但似乎正在使用 DataInputStream 回读。这不会引发错误,因为所有内容(甚至序列化对象)都是 "data",但您的代码将无法检索可用信息。如果您使输入和输出对称,您的问题(至少是短期问题)应该得到解决。
我正在制作一个智能 ATM 项目,用户也可以在其中创建一个帐户,因此我需要将数据存储到文件中。我尝试使用序列化方法并将 User class 的对象写入序列化文件。但问题是,每当我重新启动程序时,数据库都会被重写(Over Written)。
如果不使用 SQL 等任何其他方法,我有办法解决这个问题。我的意思是我现在想坚持使用序列化,因为我还不熟悉其他方法。
public void addUserToDatabase() {
String fileName = System.getProperty("user.home")+"/accounts.txt";
try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
for(int i =0; i<numberOfUser; i++) {
oos.writeObject(u[i]);
}
fos.close();
oos.close();
}
catch(Exception e) {
System.out.println("UNABLE TO ADD USER TO DATABASE!");
}
}
public void fileInputStreamMethod() throws Exception
{
String fileName = System.getProperty("user.home")+"/aas.txt";
FileOutputStream fos = new FileOutputStream(fileName);
DataOutputStream dos = new DataOutputStream(fos);
int i=12;
dos.writeInt(i);
dos.close();
FileInputStream fis = new FileInputStream(fileName);
DataInputStream dis = new DataInputStream(fis);
int factorial=dis.readInt();
System.out.println("The No. YOu entered is "+factorial);
dis.close();
}
您对数据库的读取和对数据库的写入需要对称——如果您使用 ObjectOutputStream 写出对象,然后要读回,您必须使用 objects 读回一个对象输入流。当您使用 ObjectOutputStream 写出时您不会这样做,但似乎正在使用 DataInputStream 回读。这不会引发错误,因为所有内容(甚至序列化对象)都是 "data",但您的代码将无法检索可用信息。如果您使输入和输出对称,您的问题(至少是短期问题)应该得到解决。