public class Test {

public static void main(String[] args) {
FileInputStream fis = new FileInputStream("c://1.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Student s = null;

while((s = ois.readObject()) != null) {
System.out.println(s.getId());
}
}
}
while((s = ois.readObject()) != null) 这句抛了异常、  应该是判断的条件不对、 读取结束时不是null 应该是什么? 多谢大家帮忙了、、、、

解决方案 »

  1.   

    while((s = (Student)ois.readObject()) != null) 是这样总之是判断条件的错误 
      

  2.   


    强制转换类型也不行?看下jdk的源码。。
      

  3.   

    你的student类 实现序列化接口Serializable了吗?
      

  4.   

    Student 实现系列化了、 对象是用ObjectInputStream写到文件上的、 这个都没问题 那个条件出了问题 强制转换是没问题的 我写进去的就是student对象、 应该是那个判断条件出来问题、 
      

  5.   

    我看别人的没问题。以下代码属于转载:1.ObjectOutputStreamModel.java 负责生成对象文件
    package com.kevinb.io.objectStream;import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;import com.kevinb.io.bean.User;public class ObjectOutputStreamModel {    private static void writeObjectFile(){
            String sourceFile = "src/com/kevinb/io/objectStream/userFile";
            File file = new File(sourceFile);
            try {
                FileOutputStream fiOutputStream = new FileOutputStream(file);
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(fiOutputStream);
                //开始准备插入对象
                User user1 = new User();
                user1.setUserId(1);
                user1.setUserName("Kevinb");
                user1.setPassword("ffffff");
                objectOutputStream.writeObject(user1);
               
                User user2 = new User();
                user2.setUserId(2);
                user2.setUserName("Jone");
                user2.setPassword("11");
                objectOutputStream.writeObject(user2);
               
                //写入结束标志方便读取(非常重要,如果不写入,在读取的时候无法定位读取结束);
                objectOutputStream.writeObject(null);
                //close outputStream
                objectOutputStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("对象写入成功!");
        }
       
        public static void main(String[] args) {
            writeObjectFile();
        }
    }2.ObjectInputStreamModel.java  负责解析对象文件
    package com.kevinb.io.objectStream;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.ObjectInputStream;import com.kevinb.io.bean.User;public class ObjectInputStreamModel {    @SuppressWarnings("unchecked")
        private static void readObjectFile(){
            String sourcePath = "src/com/kevinb/io/objectStream/userFile";
            File file = new File(sourcePath);
            try {
                FileInputStream fileInputStream = new FileInputStream(file);
                /**
                 * 读取方法:采用while语句进行读取,但是在写这个文件的时候一定要添加一个结束标志,否则
                 * 使用下面的代码会产生错误;
                 */
                ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
                Object object;
                //读取结束标志位:是再次读取一个对象,判定对象是否是空,如果不为null继续读取,如果为null停止读取;
                while((object=objectInputStream.readObject()) != null){
                    User user = (User)object;
                    System.out.println(user.getUserId() + " "+ user.getUserName()+" "+user.getPassword());
                }
               
                //关闭对象输入流
                objectInputStream.close();
                //关闭文件输入流
                fileInputStream.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
       
        public static void main(String[] args) {
            readObjectFile();
        }
    }
      

  6.   

    楼主看了上面的代码吗?写完文件的时候,要加个结束标志,即写个null空对象进去,否则while会找不到结束标志,就出了你那里的错了。。