java - 如何在java中读取对象并将其写入文本文件?

标签 java object serialization file-io deserialization

我有一个对象数组,我想将它们写在一个文本文件中。这样我以后就可以在数组中读回对象。我应该怎么做? 使用序列化。

反序列化不起作用:

public static void readdata(){
        ObjectInputStream input = null;
        try {
            input = new ObjectInputStream(new FileInputStream("myfile.txt")); // getting end of file exception here
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            array = (players[]) input.readObject(); // null pointer exception here
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        readdata();
        writedata();
    }

最佳答案

将对象与字符串相互转换的过程称为序列化和反序列化。为了序列化一个对象,它应该实现 Serializable 接口(interface)。大多数内置数据类型和数据结构默认是可序列化的,只有某些类是不可序列化的(例如 Socket 是不可序列化的)。

所以首先你应该让你的类可序列化:

 class Student implements java.io.Serializable {
     String name;
     String studentId;
     float gpa;
     transient String thisFieldWontBeSerialized;
 }

您可以使用 ObjectOutputStream 将其序列化并写入文件:

public class Writer {
    static void writeToFile(String fileName, Student[] students) throws IOException {
        File f = new File(fileName);
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f));
        oos.writeObject(students);
        oos.flush();
        oos.close();
    }
}

ObjectInputStream 可以类似的方式用于从文件中读回数组。

关于java - 如何在java中读取对象并将其写入文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413227/

相关文章:

javascript - 为什么某些 JavaScript 变量通过在变量名后面放置 0 来访问?

Javascript:对象和类

java - 如何序列化 BigDecimal 以与 jackson 映射值?

java - SQLContext.sql 上的 Spark NoSuchMethodError(Cloudera 5.8.0 上的 Spark 1.6.0)

java - 在 doInBackground 方法中从另一个异步任务调用 AsyncTask?

java - 告诉我Android Studios简单语法错误的解决办法

java - 在 Java 中为对象赋值

serialization - Wicket 想要序列化我的面板

java - 如何正确序列化 Hibernate 集合?

java - s3 : streaming file(s) with embedded ':' in title