四、对象专属流
ObjectInputStream
ObjectOutputStream
把流的操作跟Java对象连接起来,主要用于对象的序列化和反序列化
序列化:将内存中的Java对象写到硬盘中
反序列化:从硬盘中读取Java对象
想要一次性序列化多个对象需使用集合,将对象添加到集合中,一个个序列化是不行的。
Serializable 序列化接口,是一个标志性接口,如果Java类想进行序列化,就必须实现这个接口。
序列化版本号 :实现Serializable接口后,会生成序列化版本号,做标识作用,用以区分Java类。
如果进行序列化,此时生成一个序列化版本号,对类进行修改,这时再反序列化会再生成一个序列化版本号,是不行的,因为两个序列化版本号不同。所以可自定义序列化版本号,将序列化版本号写死。
被transient修饰的变量不参与序列化
private transient String age;
1、ObjectOutputStream
/**
* 对象流:把流的操作跟Java对象连接起来
* 主要用于对象的序列化和反序列化
*/
public class IOTest08 {
public static void main(String[] args) {
try {
//创建序列化对象
ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("userFile"));
User user1 = new User("柿","123");
User user2 = new User("子","123");
User user3 = new User("牛","123");
User user4 = new User("啊","123");
ArrayList<User> users = new ArrayList<>();
users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4);
//序列化对象
objectOutputStream.writeObject(users);
objectOutputStream.flush();
objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、ObjectInputStream
public class IOTest09 {
public static void main(String[] args) {
try {
//创建反序列化对象
ObjectInputStream userFile = new ObjectInputStream(new FileInputStream("userFile"));
ArrayList<User> o = (ArrayList<User>)userFile.readObject();
for (User user : o) {
System.out.println(user);
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
五、文件类(File类)
public class IOTest10 {
public static void main(String[] args) {
//创建file对象
File file = new File("io01.txt");
//判断是否是文件
System.out.println(file.isFile());
//判断是否是绝对路径
System.out.println(file.isAbsolute());
//获得文件的路径
System.out.println(file.getPath());
//获得文件的父级目录
System.out.println(file.getParent());
File file1 = new File("E:\\Temp\\io03.java");
System.out.println(file1.isAbsolute());
System.out.println(file1.getParent());
System.out.println(file1.getParentFile());
//创建多级目录
File file2 = new File("E:/a/b/c");
boolean mkdirs = file2.mkdirs();
System.out.println(mkdirs);
//获取一个路径下的所有文件
File file3 = new File("E:\\Temp");
File[] files = file3.listFiles();
for (File file4 : files) {
System.out.println(file4.getAbsolutePath());
}
}
}