使用序列化来保存和读取Java中的文件

时间:2017-04-30 15:59:41

标签: java oop serialization deserialization

我试图在Java中使用序列化来保存" Tweet"反对文件" tweet.ser"然后阅读文件。

这是我通过序列化保存和阅读的代码:



public class SaveRead {
  public static void save(Tweet tweet) {
    try (FileOutputStream fos = new FileOutputStream("tweet.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos);) {
      oos.writeObject(tweet);
    } catch (IOException ioe) {
      System.out.println("Problem saving tweet");
      ioe.printStackTrace();
    }
  }

  public static Tweet loadTweet() {
    Tweet tweet = new Tweet("", "");

    try (FileInputStream fis = new FileInputStream("tweet.ser"); ObjectInputStream ois = new ObjectInputStream(fis);) {
      tweet = (Tweet) ois.readObject();
    } catch (IOException ioe) {
      System.out.println("Error reading file");
      ioe.printStackTrace();
    } catch (ClassNotFoundException cnfe) {
      System.out.println("Error loading treets");
      cnfe.printStackTrace();
    }
    return tweet;
  }
}




这就是我创建一个Tweet对象并尝试保存和读取它的方法:



public static void main(String[] args) {
  // TODO code application logic here
  Tweet tweet = new Tweet("Programmer", "I can program in java.");
  SaveRead.save(tweet);
  Tweet reLoaded = SaveRead.loadTweet();
  System.out.println(reLoaded);
}




我可以看到" tweet.ser"在项目文件夹中创建的文件,但问题是我的程序没有正确读取保存的推文。我期待重新发送的推文说"程序员","我可以在java"中编程。但我得到的只是: serialization.Tweet@232204a1

1 个答案:

答案 0 :(得分:0)

感谢@Henrik的评论和解决方案,我需要在我的Tweet类中添加和覆盖toString()方法,以便在反序列化保存的tweet.ser文件时以我想要的格式获取输出。