【问题标题】:reading an object from a .txt in java从java中的.txt读取对象
【发布时间】:2013-04-06 23:38:50
【问题描述】:

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

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

}

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java file-io inputstream outputstream


【解决方案1】:

我认为您必须通过实现 java.io.Serializable 来序列化 Person 对象 来自 API 文档,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());


    }

人物类

  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

【讨论】:

  • 人实现可序列化
  • 我能够运行您的代码,它对我有用.. Person 类被序列化..除了我在 Person 类中覆盖了 toString() 方法。你得到了什么确切的错误?
  • 我什么都没得到
  • 嗨俄语..我已经添加了我以前运行的代码,请看看这是否有帮助。
【解决方案2】:

您应该指定“无”的含义。你得到:

  • null(永远不会发生)
  • 异常(例如,如果人员类或该类内部的字段是 未实现可序列化)
  • 字符串“somepackage.Person@hashcodenumber”(在这种情况下 您需要在 Person 类中覆盖 toString())
  • 没有设置任何字段的 Person 对象(请参阅下面的答案)
  • 任何其他字符串 - 检查 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    相关资源
    最近更新 更多