Java-将对象数据保存到文件中

时间:2012-05-18 14:12:38

标签: java class object serialization

我已经看到了很多不同的帖子,关于你应该将一个对象序列化到一个文件的方式,所有这些都在性质上与如何去做以及最佳实践有什么冲突。所以这就是我想要保存的内容:

public class IHandler{
    public double currentLoad;
    public String currentPrice;
    public String configArgs[];
};

我们可以假设configArgs的大小已知我需要创建一个文件,这是我到目前为止所拥有的。

public static void serializeDataOut(IHandler ISH)throws IOException{
    String fileName= "Test.txt";
    FileOutputStream fos = new FileOutputStream(fileName);
        //What do I do here?
    }

  public static IHandler serializeDataIn(){
      //What do I do here?
  }

4 个答案:

答案 0 :(得分:7)

我想,你想把对象直接写入文件

public static void serializeDataOut(IHandler ish)throws IOException{
    String fileName= "Test.txt";
    FileOutputStream fos = new FileOutputStream(fileName);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(ish);
    oos.close();
}

public static IHandler serializeDataIn(){
   String fileName= "Test.txt";
   FileInputStream fin = new FileInputStream(fileName);
   ObjectInputStream ois = new ObjectInputStream(fin);
   IHandler iHandler= (IHandler) ois.readObject();
   ois.close();
   return iHandler;
}

我刚刚提供了重要的代码。通过异常处理实现这一点。

答案 1 :(得分:3)

如何序列化对象的示例:

public static void writeToFile(File path, Database data)
{
    try(ObjectOutputStream write= new ObjectOutputStream (new FileOutputStream(path)))
    {
        write.writeObject(data);
    }
    catch(NotSerializableException nse)
    {
        //do something
    }
    catch(IOException eio)
    {
        //do something
    }
}


public static Object readFromFile(File path)
{
    Object data = null;

    try(ObjectInputStream inFile = new ObjectInputStream(new FileInputStream(path)))
    {
        data = inFile.readObject();
        return data;
    }
    catch(ClassNotFoundException cnfe)
    {
        //do something
    }
    catch(FileNotFoundException fnfe)
    {
        //do something
    }
    catch(IOException e)
    {
        //do something
    }
    return data;
}   

了解更多信息http://docs.oracle.com/javase/tutorial/jndi/objects/serial.html

答案 2 :(得分:1)

您可以使用XMLDecoder / XMLEncoder将JavaBean序列化为xml。以下是来自oracle的Javadocs的两个类的例子:

(的XMLDecoder)

   XMLDecoder d = new XMLDecoder(
                      new BufferedInputStream(
                          new FileInputStream("Test.xml")));
   Object result = d.readObject();
   d.close();

(XMLEncoder)

   XMLEncoder e = new XMLEncoder(
                      new BufferedOutputStream(
                          new FileOutputStream("Test.xml")));
   e.writeObject(new JButton("Hello, world"));
   e.close();

请注意,您需要添加getter和setter并使该类可序列化。

答案 3 :(得分:0)

你想把IHandler写入test.txt文件吗?试试

ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.write(IHandler);

如果你想从该文件中读取IHandler,需要这样做

ObjectInputStream ois = new ObjectInputStream(fos); 
IHandler iHandler = (IHandler) ois.readObject();