Java 奇怪的输入错误,我以前用过这个代码

Java 奇怪的输入错误,我以前用过这个代码,java,eof,objectinputstream,Java,Eof,Objectinputstream,在做了一次非常糟糕的家庭作业后,我决定放弃一切,从头开始会更快。不是所有的。。。我复制了这个部分,因为它工作得很好,所以我认为没有必要修改它。虽然可能并不完美,但它确实奏效了 然而现在,当我编译只是为了测试它时,我得到了一个意外错误: 输入错误:java.io.EOFException 请注意,“输入错误”来自我的捕获(IOException ioe) 文件(fileName)完全为空。里面什么都没有。这是什么原因造成的。如果文件为空,是否有方法告诉ObjectInputStream什么也不做

在做了一次非常糟糕的家庭作业后,我决定放弃一切,从头开始会更快。不是所有的。。。我复制了这个部分,因为它工作得很好,所以我认为没有必要修改它。虽然可能并不完美,但它确实奏效了

然而现在,当我编译只是为了测试它时,我得到了一个意外错误:

输入错误:java.io.EOFException

请注意,“输入错误”来自我的
捕获(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();
}
公共存储库(字符串文件名)引发FileNotFoundException,
IOException,
安全例外,
ClassNotFoundException{
this.fileName=文件名;
this.clients=newarraylist();
FileInputStream fileIn=null;
ObjectInputStream in=null;
试一试{
fileIn=newfileinputstream(this.fileName);
in=新的ObjectInputStream(fileIn);
.readObject()中的this.clients=(ArrayList);
}捕获(FileNotFoundException fnfe){
System.out.println(“未找到文件,错误:+fnfe”);
}捕获(ioe异常ioe){
System.out.println(“输入错误:+ioe”);
}捕获(ClassNotFoundException cnfe){
System.out.println(“未找到类,错误:+cnfe”);
}捕获(安全异常se){
System.out.println(
您没有访问此文件的权限,错误:
+硒);
}最后{
if(fileIn!=null)
fileIn.close();
if(in!=null)
in.close();
}
肯定是在

    in = new ObjectInputStream(fileIn);
    this.clients = (ArrayList<Client>) in.readObject();
in=newobjectinputstream(fileIn);
.readObject()中的this.clients=(ArrayList);
您想通过检查文件大小

我假设如果它是空的,那么您希望返回一个空数组列表。您不能通过反序列化空文件来实现这一点。毕竟,即使是空数组列表也有非零大小(并且需要通过序列化属性将自身标识为数组列表)

文件(文件名)完全为空。其中没有任何内容

这正是问题所在。您无法从空文件中读取对象(或数组)。它将找不到任何数据并引发文件结束异常(EOFEException)


即使是空数组(序列化为文件时)也会产生一些数据,因为对象流会将数组的类型(ArrayList)和大小(0)写入文件。当您尝试读取它时,它会期望找到这些数据。

如果我有几个空格,但仍然没有“text”/data,这是否可能
file.length()
仍然不够?还有。我如何获取文件?老实说,我只知道如果文件不包含有效的对象序列化(包括有“空格”等),如何打开文件输入/输出流然后你会很快得到一个异常。一个序列化的对象文件在面对额外的无效数据时是不可靠的确定,我该如何使用文件。length()然后,我该如何获取文件。老实说,我只知道如何使用文件输入/输出流。