当前位置:编程学习 > JAVA >>

ObjectInputStream如果从txt文件中读取2个java类?ObjectInputStream的实例也没有next方法呀?如何判断……

如何判断是否读取到文件的结尾呢?


代码如下:
class Student implements Serializable{
private static  String id;
private  String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}

}

public class ObjectInputSteamTest {

public static void main(String[] args) throws FileNotFoundException {
 Student s1 = new Student("1001","张三");
 Student s2 = new Student("1002","李四");
 
 try {
   FileOutputStream outFile= new FileOutputStream("b.txt");
 ObjectOutputStream outObj = new ObjectOutputStream(outFile);
 outObj.writeObject(s1);
 outObj.writeObject(s2);
 outObj.flush(); 
 //这里已经把2个java类(Student)实例写入到b.txt文件中了  FileInputStream inFile = new FileInputStream("b.txt");
 ObjectInputStream inObj = new ObjectInputStream(inFile);
 try {
  
Object obj = inObj.readObject();
//这里只能从b.txt文件中读取一个类,另外的类如何读取呀?  System.out.println(obj);
 

} catch (ClassNotFoundException e) {
 
e.printStackTrace();
}  
 
 
} catch (IOException e) {
e.printStackTrace();
}

}

} --------------------编程问答-------------------- 请copy我的代码实际测试一下,分不够可以加分呀! --------------------编程问答--------------------

import java.io.*;

class Student implements Serializable{
    private static String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Student(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }

}

public class ObjectInputSteamTest {

    public static void main(String[] args) throws FileNotFoundException {
        Student s1 = new Student("1001","张三");
        Student s2 = new Student("1002","李四");

        try {
            FileOutputStream outFile= new FileOutputStream("resources/out/b.txt");
            ObjectOutputStream outObj = new ObjectOutputStream(outFile);
            outObj.writeObject(s1);
            outObj.writeObject(s2);
            outObj.flush();
            outObj.close();
//这里已经把2个java类(Student)实例写入到b.txt文件中了
            FileInputStream inFile = new FileInputStream("resources/out/b.txt");
            ObjectInputStream inObj = new ObjectInputStream(inFile);
            try {

                Student stu1 = (Student)inObj.readObject();
                Student stu2 = (Student)inObj.readObject();
//这里只能从b.txt文件中读取一个类,另外的类如何读取呀?
// 保证inObj调用readObject()的顺序跟程序之前写入的顺序一致就可以读出
// 无法判定是否已经到文件结尾;
               System.out.println(stu1);
                System.out.println(stu2);

            } catch (ClassNotFoundException e) {

                e.printStackTrace();
            }

           inObj.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

--------------------编程问答--------------------


import java.io.*;

class Student implements Serializable{
    private static String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Student(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }

}

public class ObjectInputSteamTest {

    public static void main(String[] args) throws FileNotFoundException {
        Student s1 = new Student("1001","张三");
        Student s2 = new Student("1002","李四");

        try {
            FileOutputStream outFile= new FileOutputStream("resources/out/b.txt");
            ObjectOutputStream outObj = new ObjectOutputStream(outFile);
            outObj.writeObject(s1);
            outObj.writeObject(s2);
            outObj.flush();
            outObj.close();
//这里已经把2个java类(Student)实例写入到b.txt文件中了
            FileInputStream inFile = new FileInputStream("resources/out/b.txt");
            ObjectInputStream inObj = new ObjectInputStream(inFile);
            try {

                Student stu1 = (Student)inObj.readObject();
                Student stu2 = (Student)inObj.readObject();
//这里只能从b.txt文件中读取一个类,另外的类如何读取呀?
// 保证inObj调用readObject()的顺序跟程序之前写入的顺序一致就可以读出
// 无法判定是否已经到文件结尾;
               System.out.println(stu1);
                System.out.println(stu2);

            } catch (ClassNotFoundException e) {

                e.printStackTrace();
            }

           inObj.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

--------------------编程问答-------------------- resources/out/b.txt 这个是我本机的测试路径,你改成b.txt就可以了,改掉程序里面的两处,应该可以跑起来 --------------------编程问答--------------------

Student stu1 = (Student)inObj.readObject();
Student stu2 = (Student)inObj.readObject();

或者
Object obj = null;
try {
   while((obj = inObj.readObject()) != null) {
      System.out.println(obj);
   }
}
catch(EOFException e) {
   //read end
}
--------------------编程问答--------------------
引用 5 楼 softroad 的回复:
Java code

Student stu1 = (Student)inObj.readObject();
Student stu2 = (Student)inObj.readObject();

或者
Object obj = null;
try {
   while((obj = inObj.readObject()) != null) {
      System.out……

大嘴V5 --------------------编程问答-------------------- 首先,ObjectInputStream只能读取一个object,看看名字也能知道不是ObjectsInputStream。
最后,ObjectInputStream只能读取non-static属性。 --------------------编程问答--------------------
引用 4 楼 ioe_gaoyong 的回复:
resources/out/b.txt 这个是我本机的测试路径,你改成b.txt就可以了,改掉程序里面的两处,应该可以跑起来

各位大侠,你们没有发现读出来的数据是错得吗?static属性能读出来吗? --------------------编程问答--------------------    in.readObject() 对应你 out.writeObject()   你write了几次, 你就能in几次 --------------------编程问答--------------------
引用 9 楼 chenliuyang 的回复:
in.readObject() 对应你 out.writeObject() 你write了几次, 你就能in几次

-----------------
不行的。后面的 out.writeObject(),会覆盖掉前面的 out.writeObject()。不管写多少次,txt文件中只有最后一个! --------------------编程问答-------------------- id定义为了static的了
5楼正解
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,