//tea.txt 是一个文件,保存的几个类对象
//faculty是所保存类的类类型public static void read()
{try  
{ObjectInputStream p=new ObjectInputStream(new FileInputStream("tea.txt"));  
String output=new String();
int i=0;
while((t=(faculty)(p.available()))!=0)
 output+=t[i].getname()+"   "+t[i].getnum()+"\n"; 
 JOptionPane.showMessageDialog(null,output);
p.close();}
catch(Exception ex)
{
 
}}}按照我这种方法读不出来,但是我如果单独这样测试的话是有结果的:
  t[0]=new faculty();
  t[0]=(faculty)p.readObject();
  output+=t[0].getname()+"   "+t[0].getnum()+"\n";
  JOptionPane.showMessageDialog(null,output);
既然这样有结果,那为什么循环没有呢?  
并且如果我继续再写一段上面的东西的话,就什么都没有了,好奇怪啊!

解决方案 »

  1.   

    ObjectInputStream p=new ObjectInputStream(new FileInputStream("tea.txt"));  
    faculty[] t=new faculty[3];
    String output= "";
    int i=0;
    faculty data = (faculty)p.readObject();
    while(data != null) {
      t[i]=data;
      data = (faculty)p.readObject();
      output+=t[i].getname()+"   "+t[i].getnum()+"\n";
      i++;
      if (i>2) break;
    }
    p.close();前提是,你的文件也是通过 writeObject()写进去的。
      

  2.   

    谢谢你哦,我就把您的代码复制过去了,但是还是什么结果都没有,JOptionPane.showMessageDialog(null,output);
    这句话好象没有用,我是这样写的:
    ObjectOutputStream p=new ObjectOutputStream(new FileOutputStream("stu.txt",true));
       p.writeObject(stu);  
       p.close();在帮我看看
      

  3.   

    啊 复制错了,是这样写入的:
    ObjectOutputStream p=new ObjectOutputStream(new FileOutputStream("tea.txt",true));
      p.writeObject(tea);  
      p.close();
      

  4.   

    两个文件,一个专门定义数据的
    package zhangshu.test.test1;import java.io.Serializable;public class DataClass implements Serializable{
    int i;
    String s;
        String s1;
        public DataClass(int i,String s,String s1) {
         this.i = i;
         this.s = s;
         this.s1 = s1;
        }
    }这是测试程序;
    package zhangshu.test.test1;import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;public class Test5 { /**
     * @param args
     */
    public static void main(String[] args) {
    DataClass iC1 = new DataClass(1,"a","b");
    DataClass iC2 = new DataClass(2,"cc","dd");


    try {
    FileOutputStream fOStream = new FileOutputStream("c:/aaa.dat");
    ObjectOutputStream fos = new ObjectOutputStream(fOStream);
    fos.writeObject(iC1);
    fos.writeObject(iC2);
    fOStream.close();
    fos.close();

    FileInputStream fIStream = new FileInputStream("c:/aaa.dat");
    ObjectInputStream fis = new ObjectInputStream(fIStream);
    DataClass data;

    while (fIStream.available() > 0) {
    data = (DataClass)fis.readObject();
    System.out.println(data.i);
    System.out.println(data.s);
    System.out.println(data.s1);
    }
    fIStream.close();
    fis.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }jdk1.5.03b下正常通过,你稍微改下就可以用到你的程序你。
    估计是ObjectInputStream这个家伙的available方法,直接调用了父类的
    方法,java doc里面写了它的父类InputStream的available方法永远返回0,
    所以只好通过文件流的available来判断。
      

  5.   

    兄弟不好意思,还是没结果,你帮我看看这些把
    这是我的程序部分代码,我用Eclipse平台:
    class faculty implements Serializable
    {private String name;
     private String num;public  void setname()
    {name=JOptionPane.showInputDialog(null,"input the name");  
    }public void setnum()
    {num=JOptionPane.showInputDialog(null,"input the num");
    }public void setup()
    {setname();
     setnum();
     save();
    }public static void save(faculty tea)
    {try  
     {ObjectOutputStream p=new ObjectOutputStream(new FileOutputStream("tea.txt",true));
      p.writeObject(tea);  
      p.close();
     }
    catch(Exception ex)
    {
     
    }

    }
    public static void read()  
    {get();
     try  
    {ObjectInputStream p=new ObjectInputStream(new FileInputStream("tea.txt"));
    faculty t=new faculty();
    String output=new String();
    int i=0;while((t=(faculty)(p.readObject()))!=null)
     {
      output+=t.getname()+"   "+t.getnum()+"\n"; 
     }
     JOptionPane.showMessageDialog(null,output);
    p.close();
    }catch(Exception ex)
    {
     
    }

    }
    如果我这样读,就写一次,
    t=(faculty)(p.readObject());
    output+=t.getname()+"   "+t.getnum()+"\n"; 
    JOptionPane.showMessageDialog(null,output);
    这样会输出我第一次保存的对象数据,但是如果我再写一次
    t=(faculty)(p.readObject());
    output+=t.getname()+"   "+t.getnum()+"\n"; 
    JOptionPane.showMessageDialog(null,output);
    就什么也没有了,就是把JOptionPane.showMessageDialog(null,output);改为
    JOptionPane.showMessageDialog(null,"****");也不会有任何结果.....
    帮忙看看!
      

  6.   

    给你写了一个
    faculty.javaimport java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.Serializable;
    import java.util.ArrayList;import javax.swing.JOptionPane;class faculty implements Serializable {
    private String name;
    private String num; public  void setname() {
    name=JOptionPane.showInputDialog(null,"input the name");  
    }
    public void setnum() {
    num=JOptionPane.showInputDialog(null,"input the num");
    } public static void setup(){
    ArrayList teaList = get();
    faculty f = new faculty();
    f.setname();
    f.setnum();
    teaList.add(f);
    save(teaList);
    } public static void save(ArrayList teaList) {
    try {
    FileOutputStream fos = new FileOutputStream("c:/tea.txt");
    ObjectOutputStream p=new ObjectOutputStream(fos);
    for (int i=0; i<teaList.size(); i++) {
    p.writeObject(teaList.get(i));  
    }
    fos.close();
    p.close();
    } catch(Exception ex) {
    ex.printStackTrace();
    }
        }

    public static ArrayList get() {
    ArrayList list = new ArrayList();
    try {
    FileInputStream fis = new FileInputStream("c:/tea.txt");
    ObjectInputStream p = new ObjectInputStream(fis);
    faculty t;
    String output = "";
    int i=0; while(fis.available() > 0){
    t = (faculty)(p.readObject());
    list.add(t);
    }
    fis.close();
    p.close();
    return list;
    } catch(Exception ex){
    ex.printStackTrace();
    return list;
    }
    }
    public static void read() {
    try {
    FileInputStream fis = new FileInputStream("c:/tea.txt");
    ObjectInputStream p = new ObjectInputStream(fis);
    faculty t;
    String output = "";
    int i=0; while(fis.available() > 0){
    t = (faculty)(p.readObject());
    output+=t.getName()+" "+t.getNum()+"\n";
    }
    JOptionPane.showMessageDialog(null,output);
    fis.close();
    p.close();
    } catch(Exception ex){
    ex.printStackTrace();
    }
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getNum() {
    return num;
    }
    public void setNum(String num) {
    this.num = num;
    }
    }测试程序
    /**
     * 
     *//**
     * @author wdman
     *
     */
    public class TestFaculty { /**
     * @param args
     */
    public static void main(String[] args) {
    faculty fac = new faculty();
    fac.setup();
    faculty.read();
    }}