2013-04-14 59 views
0

我正在尝试写入并对象到文件,然后从文件中读取对象并对其执行一些操作。该对象被写入文件很好,但是当我试图从文件中检索它时,我什么也得不到。我使用的代码如下:从java中的.txt读取对象

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(); 
    } 

} 
+2

为了更好地帮助越早,张贴[SSCCE(http://sscce.org/)。 –

回答

3

我认为你必须通过实施java.io.Serializable 从API文档,以序列化Person对象,ObjectInputStream

ObjectInputStream is used to recover those objects previously serialized. 

下面的代码(主要功能是一样的你:

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类

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; 
} 


} 

输出:

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

person implements Serializable – russian

+0

我能够运行你的代码,它对我来说很有效...... Person类被序列化..除了我重写Person类中的toString()方法。你得到什么确切的错误? – prashantsunkari

+0

我没有得到任何东西 – russian

0

应指定由 '无' 的意思。您是否获得:

  • 为零(即永远不会发生)
  • 异常(例如,如果Person类或字段级的内部 不实现Serializable接口)
  • 字符串“somepackage.Person @ hashcodenumber”(在这种情况下 你需要在Person类重写的toString())
  • 没有设置任何字段Person对象(见下面的答案)
  • 任何其他字符串 - 检查你‘的toString’方法在人类

您可以将writeObject和readObject添加到您的person类。 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(); 
}