java字节流相关概念可看我主页 《深入了解java字节流:探索输入流与输出流》 文章。
java File类相关概念可看我主页 《Java File类代码示例》文章。
引言:
在Java编程中,文件操作和对象序列化是常见的任务,它们在许多应用程序中起着至关重要的作用。本文将深入探讨Java中的文件操作和对象序列化,并通过实例代码展示其使用方法和技巧,帮助读者更好地理解和运用这些功能。
1. 文件操作的基础知识:
文件操作是处理计算机文件的过程,包括创建、读取、写入和删除文件等操作。在Java中,文件操作通常通过File
类和相关的输入输出流来实现。
Java中文件操作的基本类和方法包括:
File
类:用于表示文件或目录的抽象路径名。FileInputStream
和FileOutputStream
:用于从文件中读取和写入数据的字节流。BufferedReader
和BufferedWriter
:用于高效读写字符流。
2. 对象的序列化与反序列化:
对象的序列化是将对象转换为字节流的过程,而反序列化则是将字节流转换回对象的过程。在Java中,对象的序列化和反序列化通过实现Serializable
接口来实现。
Java中对象的序列化与反序列化可以通过ObjectOutputStream
和ObjectInputStream
类来实现,示例如下:
// 定义一个可序列化的Person类
class Person implements Serializable {
private String name;
private int age;
// 构造方法和其他方法
// 省略 getter 和 setter 方法
}
// 序列化对象
Person person = new Person("Tom", 25);
FileOutputStream fileOut = new FileOutputStream("person.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(person);
out.close();
fileOut.close();
// 反序列化对象
FileInputStream fileIn = new FileInputStream("person.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
Person restoredPerson = (Person) in.readObject();
in.close();
fileIn.close();
System.out.println("反序列化后的对象:" + restoredPerson);
3. 代码解析与深入理解:
以上示例代码中,我们展示了文件操作和对象序列化的基本用法。文件操作中使用了File
类来创建、读取和删除文件,而对象序列化则是通过Serializable
接口和ObjectOutputStream
、ObjectInputStream
类来实现的。
4.具体代码示例:
import java.io.*;
import java.util.Scanner;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.io.Serializable;
public class Main {
public static void main(String[] args) throws IOException {
String address = "D:\\java\\学习\\my_information.txt";
File information = new File( address );
if( information.exists() ) {
try (FileInputStream out = new FileInputStream(address)){
ObjectInputStream oos = new ObjectInputStream(out);
try {
Person a = (Person) oos.readObject();
System.out.println(a.toString());
} catch (ClassNotFoundException e) {
System.out.println("读取文件内容失败!!!");
}
out.close();
oos.close();
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
if( information.delete() ) {
System.out.println("文件删除成功!!!");
}
} else {
try {
if( information.createNewFile() ) {
try (FileOutputStream myInformation = new FileOutputStream(address)) {
ObjectOutputStream oos = new ObjectOutputStream(myInformation);
Scanner s = new Scanner(System.in);
String name = s.next();
String age = s.next();
String height = s.next();
Person tom = new Person( name, age, height);
oos.writeObject(tom);
myInformation.close();
oos.close();
} catch (IOException e) {
System.out.println("输入文件失败!!!");
}
//System.out.println(information.getName());
}
} catch (IOException e) {
System.out.println("文件创建失败");
}
}
}
}
class Person implements Serializable{
public String name;
public String age;
public String height;
public Person(String name, String age, String height) {
this.name = name;
this.age = age;
this.height = height;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", height='" + height + '\'' +
'}';
}
}