使用 ObjectInputStream 导入多个对象

Importing multiple objects with ObjectInputStream

在实施上次 post 中给出的建议后,我现在有了一段没有任何错误消息的有效代码,但我的代码仍然只会打印文件中的第一个对象。如果有任何建议,我将不胜感激。

import java.io.*;
import java.util.*;


public class Mainclass {
    public static void main(String[] args) {
        
        InputStream is;
        try {
            is = new FileInputStream("or.rtf");
            
            ObjectInputStream ois;
            try {
                
                int l = 1;
                ois = new ObjectInputStream(is);
                
                while (l > 0) {
                    
                        
                    try {
                        
                        Stone p = (Stone) ois.readObject();
                        System.out.println(p);
                        
                        
                    }   catch(Exception e) {
                            if(e instanceof EOFException) {
                                l--;
                                System.err.println();
                            } else if(e instanceof FileNotFoundException) {
                                l--;
                                System.err.println(e);
                            } else {
                                System.err.println(e);
                            }
                    }
                }
                ois.close();
                    
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}

将对象保存到文件的代码:

import java.io.*;
import java.util.*;

public class Saver {
    public static void main(String[] args) {
        
        ArrayList<Stone> objects = new ArrayList<Stone>();
        objects.add(new Stone("Max",50,90));
        objects.add(new Stone("Fiona",30,60));
        objects.add(new Stone("Sam",20,30));
        
        for (int i = 0; i < objects.size(); i++ ) {
        
        
            try {
            OutputStream os = new FileOutputStream("qt.rtf");
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(objects.get(i));
            System.out.println(i);
            oos.close();
        }   catch (IOException e) {
                System.err.println(e);
            }
        }
    }
}

我实现了 println(i) 来检查代码是否在循环中执行。

更改 ObjectOutputStreamFileOutputStream 的范围。

    public static void main(String[] args) {
        ArrayList<Stone> objects = new ArrayList<Stone>();
        objects.add(new Stone("Max",50,90));
        objects.add(new Stone("Fiona",30,60));
        objects.add(new Stone("Sam",20,30));

        try {
            OutputStream os = new FileOutputStream("qt.rtf");
            ObjectOutputStream oos = new ObjectOutputStream(os);
            
            for (int i = 0; i < objects.size(); i++ ) {
                oos.writeObject(objects.get(i));
                System.out.println(i);
            }
            oos.close();
        } catch (IOException e) {
            System.err.println(e);
        }
    }
}

您也没有从创建 or.rtfqr.rtf.

的同一个文件中读取