在做完家庭作业的尝试非常糟糕之后,我决定放弃一切并从头开始会更快。好吧不是一切......我复制了这部分,因为它完美地工作,所以我看到没有必要修改它。虽然可能并不完美,但它确实有效。
然而现在,当我编译以测试它时,我收到一个意外错误:
Input error: java.io.EOFException
。
请注意,“输入错误”来自我的catch(IOException ioe)
。
文件(fileName
)完全为空。什么都没有。什么可能导致这一点。如果文件为空,有没有办法告诉ObjectInputStream
什么都不做?
我在其他“迭代”上用空文件测试了这个,没有这个问题。我甚至将我的文件命名为相同。
public Repository (String fileName) throws FileNotFoundException,
IOException,
SecurityException,
ClassNotFoundException {
this.fileName = fileName;
this.clients = new ArrayList<Client> ();
FileInputStream fileIn = null;
ObjectInputStream in = null;
try {
fileIn = new FileInputStream(this.fileName);
in = new ObjectInputStream(fileIn);
this.clients = (ArrayList<Client>) in.readObject();
} catch (FileNotFoundException fnfe) {
System.out.println("File not found, error: " + fnfe);
} catch (IOException ioe) {
System.out.println("Input error: " + ioe);
} catch (ClassNotFoundException cnfe) {
System.out.println("Class not found, error: " + cnfe);
} catch (SecurityException se) {
System.out.println(
"You do not have permission to access this file, error: "
+ se);
} finally {
if (fileIn != null)
fileIn.close();
if (in != null)
in.close();
}
答案 0 :(得分:1)
当然
之前 in = new ObjectInputStream(fileIn);
this.clients = (ArrayList<Client>) in.readObject();
您想通过File.length()检查文件大小。
我假设它是空的,那么你想要返回一个空的数组列表。你不能通过反序列化一个空文件来做到这一点。毕竟,即使是空数组列表也具有非零大小(并且需要通过序列化属性将自身标识为数组列表)
答案 1 :(得分:1)
文件(fileName)完全为空。什么都没有。
这正是问题所在。您无法从空文件中读取对象(或数组)。它将找不到任何数据并抛出End-of-file-Exception(EOFException)。
即使是空数组 - 当序列化为文件时 - 也会生成一些数据,因为对象流会将类型(ArrayList)和数组大小(0)写入文件。当您尝试阅读它时,它会期望找到这些数据。