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();
}
}
}
--------------------编程问答-------------------- resources/out/b.txt 这个是我本机的测试路径,你改成b.txt就可以了,改掉程序里面的两处,应该可以跑起来 --------------------编程问答--------------------
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();
}
}
}
--------------------编程问答--------------------
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
}
大嘴V5 --------------------编程问答-------------------- 首先,ObjectInputStream只能读取一个object,看看名字也能知道不是ObjectsInputStream。
最后,ObjectInputStream只能读取non-static属性。 --------------------编程问答--------------------
各位大侠,你们没有发现读出来的数据是错得吗?static属性能读出来吗? --------------------编程问答-------------------- in.readObject() 对应你 out.writeObject() 你write了几次, 你就能in几次 --------------------编程问答--------------------
-----------------
不行的。后面的 out.writeObject(),会覆盖掉前面的 out.writeObject()。不管写多少次,txt文件中只有最后一个! --------------------编程问答-------------------- id定义为了static的了
5楼正解
补充:Java , Java SE