class User() implements Serializable
  {
        String name;
        String password;
     public User(String str1,String str2)
    {
       this.name=str1;
       this.password=str2;
    }
  }   假如我实例了N个User  对象
    File file=new File("C:\\user.txt");
   FileOutputStream fos=new FileOutputStrea(file);    ObjectOutputStream oos=new ObjectOutputStream(fos);
    oos.writeObject(User temp);//把这些对象写到文件中
  但我用
   ObjectInputStream ois=new ObjectInputStream(new FileInputStream(file));
ois.readObject() //读出文件中的对象
 来读取对象   只能读第一个对象 ?   我希望能读出所有对象  
请各位高手指点一哈  
不胜感激
.cn

解决方案 »

  1.   

    /**
     * project_name: Test
     * package_name: CSDN_Test_20071126
     * package_declaration: package CSDN_Test_20071126;
     * filename: ReadAllObject.java
     * author: yuhaiming
     * date: 2007-11-26
     */
    package CSDN_Test_20071126;
    import java.io.*;
    /**
     *  
     * @author yuhaiming
     *
     */
    public class ReadAllObject {
    /**
     * 主处理函数
     */
    public static void disposal()throws Exception{
    User[] users = new User[5];
    for(int i=0;i<users.length;i++){
    users[i] = new User();
    users[i].setName("name"+i);
    users[i].setPassword("password"+i);
    } File   file=new   File("D:\\workspace\\Test\\user.txt");
        FileOutputStream   fos=new   FileOutputStream(file); 
        ObjectOutputStream   oos=new   ObjectOutputStream(fos); 
    for(int i=0;i<users.length;i++){
    //System.out.println(users[i].getName());
    //System.out.println(users[i].getPassword());
    oos.writeObject(users[i]);
    }
    ObjectInputStream   ois=new   ObjectInputStream(new   FileInputStream(file)); 
    User curUser;
    try{
    while((curUser = (User)ois.readObject())!=null){
    System.out.println(curUser.getName());
    System.out.println(curUser.getPassword());
    }
    }catch(Exception e){

    }


    }
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
    // TODO Auto-generated method stub
    disposal();
    }}class   User  implements   java.io.Serializable 

        String   name; 
        String   password;  public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;

         
      

  2.   

    就我所知ObjectOutputStream的readObject()遇到文件结尾会直接抛出异常 
    而不是返回null
      

  3.   

            try{
                while((curUser = (User)ois.readObject())!=null){
                    System.out.println(curUser.getName());
                    System.out.println(curUser.getPassword());    
                }
            }catch(Exception e){
                
            }
    手动处理掉这个异常,呵呵,谁有更好的方法指点下哈
      

  4.   


    while(true)
    {
    User user=null;
    try
    {
       user=(User)ois.readObject();
    }
    catch(Exception ex){user=null;}
    if(user==null)
        break;
    System.out.println(curUser.getName());
    System.out.println(curUser.getPassword());  
    }
      

  5.   

    try{
                while((curUser = (User)ois.readObject())!=null){
                    System.out.println(curUser.getName());
                    System.out.println(curUser.getPassword());    
                }
            }catch(Exception e){
                
            }
    这种方法  会抛这个java.io.StreamCorruptedException异常
    2楼的大哥  你的代码 我执行不成功
    抛Exception in thread "main" java.lang.NoSuchMethodError: ceshi.User.setName(Ljava/lang/String;)V
    at ceshi.ReadAllObject.disposal(ReadAllObject.java:47)
    at ceshi.ReadAllObject.main(ReadAllObject.java:77)
        users[i].setName("name"+i);  这行 报错