将数据保存在.db文件中-java.io.file
我正在尝试将JAVA程序的数据保存在.db文件中,但不起作用。 出现以下错误消息: “将数据保存在.db文件中-java.io.file,java,eclipse,java-io,Java,Eclipse,Java Io,我正在尝试将JAVA程序的数据保存在.db文件中,但不起作用。 出现以下错误消息: “java.io.EOFException 在java.io.ObjectInputStream$PeekInputStream.readFully处(未知源) 位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源) 位于java.io.ObjectInputStream.readStreamHeader(未知源) 位于java.io.Obj
java.io.EOFException
在java.io.ObjectInputStream$PeekInputStream.readFully处(未知源)
位于java.io.ObjectInputStream$BlockDataInputStream.readShort(未知源)
位于java.io.ObjectInputStream.readStreamHeader(未知源)
位于java.io.ObjectInputStream。(未知源)
位于server.server.main(server.java:27)
正在运行
”
我的程序是一个使用JavaRMI的客户机-服务器模型。我有两个客户端,两个接口,然后是多个类,包括一个服务器类和一个包含所有方法的实现类
“save”方法位于实现类中,如下所示:
public void save() {
ObjectOutputStream out;
try {
out = new ObjectOutputStream(new FileOutputStream(new java.io.File("C:/Users/Myself/Desktop/Hospital.db")));
out.writeObject(this);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
在服务器类中:
try {
ObjectInputStream in;
try {
in = new ObjectInputStream(new FileInputStream(new java.io.File("C:/Users/Myself/Desktop/Hospital.db")));
read = (implementation)in.readObject();
in.close();
System.out.println(read);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
read = new implementation();
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
read = new implementation();
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
read = new implementation();
e.printStackTrace();
}
然后在两个客户端中使用“save”方法。在尝试读取对象流头时,异常堆栈跟踪显示文件的enf。由此我们可以确定以下几点:
- 从文件
读取对象时出现问题。它不会像您的问题描述所暗示的那样在编写对象时发生C:/Users/imf/Desktop/Hospital.db
- 跟踪
显示流正在尝试读取其头,因此它发生在文件的开头。流头通常由两个短值组成,即流中的前4个字节ObjectInputStream.readStreamHeader()
和AC ED
00 05
- 在读取流头之前抛出EOFEException意味着流中的字节数少于4个。我甚至打赌它是空的。为什么是空的?如果没有看到更多的代码,就不可能知道
因此,简而言之:您的代码试图从空文件反序列化对象,导致您观察到的异常。据我所知,您正在从文件读取,而不是写入。我认为在客户端完成写入文件之前,服务器可能正在尝试读取该文件。非常感谢!我现在明白了