简体   繁体   中英

reading an object from a .txt in java

I'm trying to write and object to a file then read the object from the file and perform some operation on it. The object gets written to the file fine but when I try to retrieve it from the file I get nothing. The code I used is below:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;


public class Driver 
{
    public static void main(String[] args) throws IOException, ClassNotFoundException 
    {
        FileOutputStream fos = new FileOutputStream("C:\\Users\\Russian\\Desktop\\file.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        Person person = new Person("B1234","Roshane","Nolan","male","Spanish Town",new Date(),
                "B2134","B3214",150.0,5.11);

        oos.writeObject(person);

        oos.flush();
        oos.close();

        //READING FROM THE FILE

        FileInputStream fis = new FileInputStream("C:\\Users\\Russian\\Desktop\\file.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);


        Person object = (Person) ois.readObject();
        System.out.println(object);

        ois.close();
    }

}

I think you have to Serialize the Person object by implementing java.io.Serializable From the API doc, ObjectInputStream

  ObjectInputStream is used to recover those objects previously serialized. 

Code Below(Main function is same as yours:

  public static void main(String[] args) throws IOException, ClassNotFoundException 
    {
        FileOutputStream fos = new FileOutputStream("src/main/resources/Test.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);

        Person person = new Person("B1234","Roshane","Nolan","male","Spanish Town",new Date(),
                "B2134","B3214",150.0,5.11);

        oos.writeObject(person);

        oos.flush();
        oos.close();

        //READING FROM THE FILE

        FileInputStream fis = new FileInputStream("src/main/resources/Test.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);


        Person object = (Person) ois.readObject();
        System.out.println(object.toString());


    }

Person Class

  import java.util.Date;

  public class Person implements java.io.Serializable{

String arg1,arg2,arg3,arg4,arg5,arg6,arg7;
Double d1,d2;
Date date1;
public Person(String string, String string2, String string3,
        String string4, String string5, Date date, String string6,
        String string7, double d, double e) {
    this.arg1=string;
    this.arg2=string2;
    this.arg3=string3;
    this.arg4=string4;
    this.arg5=string5;
    this.arg6=string6;
    this.arg7=string7;
    this.d1=d;
    this.d2=e;
    this.date1=date;


    // TODO Auto-generated constructor stub
}

@Override
public String toString()
{
    return "Person:"+this.arg1+":"+this.arg2+":"+this.arg3+":"+this.arg4+":"+this.arg5+":"+this.arg6+":"+this.arg7+":"+this.d1+":"+this.d2+":"+this.date1;
}


 }

Output :

Person:B1234:Roshane:Nolan:male:Spanish Town:B2134:B3214:150.0:5.11:Sun Apr 14 23:11:27 CDT 2013

You should specify what you mean by 'nothing'. Are you getting:

  • null (that will never happen)
  • an exception (eg if person class or a field inside of that class is not implementing Serializable)
  • a string 'somepackage.Person@hashcodenumber' (in which case you need to override toString() in the Person class)
  • a Person object without any fields set (see the answer below)
  • any other string - check your 'toString' method in the Person class

You can add writeObject and readObject to your person class. http://docs.oracle.com/javase/1.4.2/docs/api/java/io/ObjectInputStream.html

private void writeObject(ObjectOutputStream oos) 
{
    // default serialisation 
    oos.defaultWriteObject();

    // write custom fields
    oos.writeUTF(this.name);
}

private void readObject(ObjectInputStream ois) 
           throws ClassNotFoundException, IOException 
    {
    // default serialisation
    ois.defaultReadObject();

    // read custom fields
    this.name = ois.readUTF();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM