Java将对象保存到文件中/从文件中读取对象的方法可以通过序列化(Serialization)实现。Serialization是将Java对象转换成字节序列以便将其存储在文件、传输或在网络上进行分享的过程。Java序列化机制可以确保序列化的对象的完整性。以下是保存/读取对象的方法。
将Java对象保存到文件中
首先,需要将Java对象序列化保存到文件中,该过程需要以下步骤:
- 构造一个实现Serializable接口的对象
- 创建一个ObjectOutputStream对象,该对象可以将Java对象转换成字节序列
- 使用writeObject()方法写入该对象
- 调用close()方法关闭ObjectOutputStream
以下是一个保存对象到文件的示例:
public class SaveObjectToFile {
public static void main(String[] args) {
Student s = new Student("John Doe", "Computer Science", 3.9);
try {
FileOutputStream fileOut = new FileOutputStream("student.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(s);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in student.ser");
} catch (IOException i) {
i.printStackTrace();
}
}
}
上面的示例使用了一个Student类对象,该类实现了Serializable接口。在保存对象之前,使用FileOutputStream将该文件对象写入student.ser文件。接下来,使用ObjectOutputStream将该对象序列化并写入文件。
从文件中读取Java对象
要从Java文件中读取对象,需要使用以下步骤:
- 创建一个FileInputStream对象和一个ObjectInputStream对象
- 使用readObject()方法从文件中读取对象
- 调用close()方法关闭ObjectInputStream
以下是一个从文件中读取Java对象的示例:
public class ReadObjectFromFile {
public static void main(String[] args) {
try {
FileInputStream fileIn = new FileInputStream("student.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Student s = (Student) in.readObject();
in.close();
fileIn.close();
System.out.println("Deserialized data for " + s.getName());
} catch (IOException i) {
i.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println("Student class not found");
c.printStackTrace();
return;
}
}
}
上面的示例使用了FileInputStream和ObjectInputStream对象从student.ser文件中读取一个Student对象。这里需要注意我们需要将读取到的Object对象强制转换为Student对象。
示例
为了方便读者,这里提供一个完整的Java程序示例来演示保存/读取Java对象的过程。在这个示例中,我们创建了一个Dog类并编写了saveDog()和readDog()函数来实现将Dog对象保存到文件和从文件中读取的功能。
import java.io.*;
public class ObjectSerializer {
public static void saveDog(Dog d) {
try {
FileOutputStream fos = new FileOutputStream("dog.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(d);
oos.close();
fos.close();
System.out.println("Dog object saved in dog.ser");
} catch (IOException e) {
e.printStackTrace();
}
}
public static Dog readDog() {
Dog d = null;
try {
FileInputStream fis = new FileInputStream("dog.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
d = (Dog) ois.readObject();
ois.close();
fis.close();
System.out.println("Dog object loaded from dog.ser");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return d;
}
public static void main(String[] args) {
// 创建一个Dog对象并将其保存到文件中
Dog d1 = new Dog();
ObjectSerializer.saveDog(d1);
// 从文件中读取Dog对象
Dog d2 = ObjectSerializer.readDog();
System.out.printf("The name of the dog is: %s\n", d2.getName());
}
}
class Dog implements Serializable {
private String name;
private int age;
private String breed;
public Dog() {
name = "Doggy";
age = 2;
breed = "Golden Retriever";
}
public String getName() {
return name;
}
}
运行上述示例后,可得到以下输出:
Dog object saved in dog.ser
Dog object loaded from dog.ser
The name of the dog is: Doggy
上面表明,程序正确地保存了Dog类对象,并从文件中读取了该对象。
这就是Java将对象保存到文件中/从文件中读取对象的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java将对象保存到文件中/从文件中读取对象的方法 - Python技术站