从文件中读取和写入Java中的Obj。文件结束异常

从文件中读取和写入Java中的Obj。文件结束异常,java,serialization,objectinputstream,objectoutputstream,Java,Serialization,Objectinputstream,Objectoutputstream,我试图在一个文件上写一个对象,然后从同一个文件中读取它 我从一个简单的文本文件填充了一个对象的arraylist。 当我试图在文件上写入时,我有一个EOFEException public class CaricaTestoScriviOggetti_Copia { public static void main(String[] args) { File fileIn = new File("src/Lista.txt"); Scanner input

我试图在一个文件上写一个对象,然后从同一个文件中读取它 我从一个简单的文本文件填充了一个对象的arraylist。 当我试图在文件上写入时,我有一个EOFEException

public class CaricaTestoScriviOggetti_Copia {

    public static void main(String[] args) {
        File fileIn = new File("src/Lista.txt");
        Scanner input = null;
        try {
            input = new Scanner(fileIn);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        ArrayList<Persona> persone = new ArrayList<Persona>();
        ArrayList<Persona> maggiorenni = new ArrayList<Persona>();
        String nome = null;
        String cognome = null;
        int eta = 0;
        while (input.hasNext()) {
            nome = input.next();
            cognome = input.next();
            eta = input.nextInt();
            if (input.hasNext("\n"))
                input.nextLine();
            persone.add(new Persona(nome, cognome, eta));
        }

        for (Persona p : persone) {
            System.out.println(p);
            if (p.getEta() > 17)
                maggiorenni.add(p);
        }

        input.close();

        FileOutputStream fos = null;
        ObjectOutputStream oos = null;
        try {
            fos = new FileOutputStream("src/ListaObj.dat");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            oos = new ObjectOutputStream(fos);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        for (Persona p : maggiorenni) {
            try {
                oos.writeObject(p);
                oos.flush();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        // END FOR

        try {
            fos.close();
            oos.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        FileOutputStream fos2 = null;
        ObjectOutputStream oos2 = null;
        try {
            fos2 = new FileOutputStream("src/Oggetto.dat");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            oos2 = new ObjectOutputStream(fos);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            oos2.writeObject(maggiorenni.get(1));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            fos2.close();
            oos2.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        FileInputStream fis = null;
        ObjectInputStream ois = null;
        try {
            fis = new FileInputStream("src/Oggetto.dat");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            ois = new ObjectInputStream(fis);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Persona catched = null;

        try {
            catched = (Persona) ois.readObject();
        } catch (ClassNotFoundException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        // END FOR

        try {
            fis.close();
            ois.close();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        System.out.println("<------------Oggetto Letto------------>");
        System.out.println(catched);

        // END MAIN
    }
    // END CLASS
}
public class CaricaTestoScriviOggetti_Copia{
公共静态void main(字符串[]args){
File fileIn=新文件(“src/Lista.txt”);
扫描仪输入=空;
试一试{
输入=新扫描仪(文件输入);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
ArrayList persone=新的ArrayList();
ArrayList maggiorenni=新的ArrayList();
字符串nome=null;
字符串cognome=null;
int eta=0;
while(input.hasNext()){
nome=input.next();
cognome=input.next();
eta=输入.nextInt();
if(input.hasNext(“\n”))
input.nextLine();
添加(新人物角色(nome、cognome、eta));
}
对于(角色p:个人){
系统输出println(p);
如果(p.getEta()>17)
加上(p);
}
input.close();
FileOutputStream=null;
ObjectOutputStream oos=null;
试一试{
fos=新文件输出流(“src/ListaObj.dat”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
oos=新对象输出流(fos);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
对于(角色p:maggiorenni){
试一试{
oos.writeObject(p);
oos.flush();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
//结束
试一试{
fos.close();
oos.close();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
FileOutputStream fos2=null;
ObjectOutputStream oos2=null;
试一试{
fos2=newfileoutputstream(“src/Oggetto.dat”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
oos2=新对象输出流(fos);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
oos2.writeObject(maggioreni.get(1));
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
fos2.close();
oos2.close();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
FileInputStream fis=null;
ObjectInputStream ois=null;
试一试{
fis=新文件输入流(“src/Oggetto.dat”);
}catch(filenotfounde异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
ois=新的ObjectInputStream(fis);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
人物角色捕获=空;
试一试{
catched=(Persona)ois.readObject();
}捕获(ClassNotFoundException | IOException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
//结束
试一试{
fis.close();
ois.close();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
System.out.println(“”);
系统输出打印项次(捕获);
//端干管
}
//末级
}
您的读取循环无效
readObject()
在流的末尾不返回null,所以在循环终止条件下测试它是没有意义的

for (;;) {
    try {
        p = (Persona) ois.readObject();
        k++;
        persone.add(p);
    } catch (EOFException exc) {
        break;
    }
}

“当我试图在文件上写入时,我有一个EOFEException。”不,你没有。当您尝试从文件中读取时,会出现
EOFEException
,原因是文件中没有任何内容。注意:不要这样写代码。取决于先前try块中代码成功与否的代码必须位于该try块内。很抱歉,我发布了错误的代码部分。你认为我必须删除这篇文章并用正确的代码部分写一篇吗?这是给我这个错误的代码你应该编辑你的问题。删除错误的代码并输入正确的代码。
for (;;) {
    try {
        p = (Persona) ois.readObject();
        k++;
        persone.add(p);
    } catch (EOFException exc) {
        break;
    }
}