是否可以检索我在 Java 中保存在 .dat 文件中的对象的属性?
Is it possible to retrieve the attributes of an Object I saved inside a .dat file in Java?
我做了这个 class,它有属性 'Surname' 和 'pc'
public class Person implements Serializable{
String surname;
int pc;
Person(String a, int c){
this.surname = a;
this.pc = c;
}
并创建了一个名为 'p' 的实例。我在下面名为 'people.dat' 的文件中写入了对象 p,然后读取该文件。
public class Main{
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
int c = sc.nextInt();
Person p = new Person(a, c);
System.out.println(p.surname+" "+p.pc);
FileOutputStream foo = new FileOutputStream("people.dat");
ObjectOutputStream oos = new ObjectOutputStream(foo);
oos.writeObject(p);
FileInputStream fis = new FileInputStream("people.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object l = ois.readObject();
}
}
我的问题是,既然对象已写入文件,是否可以读取 'p' 的属性?如果是这样,我该如何访问它们?
您需要将 Object
转换为 Person
才能访问其成员。而不是
Object l = ois.readObject();
尝试
Person l = (Person) ois.readObject();
因为被反序列化的对象实际上是一个 Person
,这将毫无问题地工作。请注意不要尝试将对象转换为错误的类型,除非您喜欢 ClassCastException
s.
我做了这个 class,它有属性 'Surname' 和 'pc'
public class Person implements Serializable{
String surname;
int pc;
Person(String a, int c){
this.surname = a;
this.pc = c;
}
并创建了一个名为 'p' 的实例。我在下面名为 'people.dat' 的文件中写入了对象 p,然后读取该文件。
public class Main{
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
Scanner sc = new Scanner(System.in);
String a = sc.nextLine();
int c = sc.nextInt();
Person p = new Person(a, c);
System.out.println(p.surname+" "+p.pc);
FileOutputStream foo = new FileOutputStream("people.dat");
ObjectOutputStream oos = new ObjectOutputStream(foo);
oos.writeObject(p);
FileInputStream fis = new FileInputStream("people.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object l = ois.readObject();
}
}
我的问题是,既然对象已写入文件,是否可以读取 'p' 的属性?如果是这样,我该如何访问它们?
您需要将 Object
转换为 Person
才能访问其成员。而不是
Object l = ois.readObject();
尝试
Person l = (Person) ois.readObject();
因为被反序列化的对象实际上是一个 Person
,这将毫无问题地工作。请注意不要尝试将对象转换为错误的类型,除非您喜欢 ClassCastException
s.