1、 对象流
ObjectInputStream、ObjectOutputStream
为什么需要对象流,因为我们要保存一个Person对象到文件中,还要可以从文件中获取这个对象
Person("lwd",10)
序列化和反序列化
序列化:将数据类型和数据值保存下来
反序列化:恢复数据的值和数据类型
Serializable接口:
类的序列化由实现java.io.Serializable接口的类启用。 不实现此接口的类将不会使任何状态序列化或反序列化。 可序列化类的所有子类型都是可序列化的。 序列化接口没有方法或字段,仅用于标识可串行化的语义。
1.1 ObjectOutputStream
如果一个类的对象需要序列化,这个类需要实现Serializable
public class Person implements Serializable {
//序列化的版本号,目的是为了提高兼容性
private static final long serialVersionUID = 1L;
private String name;
...构造器,getset...
}
//序列化后的文件格式不是文本
String filePath = "data";
ObjectOutputStream ops = null;
try{
ops = new ObjectOutputStream(new FileOutputStream(filePath));
ops.writeInt(24);
ops.writeDouble(500);
ops.writeObject(new Person("lwd",24));
ops.writeObject(new Person("zhh",19));
}finally {
ops.close();
}
1.2 ObjectInputStream
String filePath = "data";
ObjectInputStream ois = null;
try{
//反序列化的顺序要与序列化的顺序一致
ois = new ObjectInputStream(new FileInputStream(filePath));
System.out.println(ois.readInt());
System.out.println(ois.readDouble());
Person person = (Person) ois.readObject();
Person person1 = (Person) ois.readObject();
System.out.println(person);
System.out.println(person1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
ois.close();
}
2、转换流
2.1 InputStreamReader
InputStreamReader 继承于Reader属于字符流
InputStreamReader isr;
BufferedReader bfr = null;
try {
isr = new InputStreamReader(new FileInputStream("news.txt"));
//为了提高效率,在使用缓冲流包装
bfr = new BufferedReader(isr);
//返回文件的编码
String encoding = isr.getEncoding();
System.out.println(encoding);
String line = "";
while ((line = bfr.readLine()) != null){
System.out.println(line);
}
}finally {
//关闭外层流
bfr.close();
}
2.2 OutputStreamWriter
OutputStreamWriter osw;
BufferedWriter bfw = null;
try {
osw = new OutputStreamWriter(new FileOutputStream("goodsList"), StandardCharsets.UTF_8);
bfw = new BufferedWriter(osw);
osw.write("bill of goods: candy ......");
}finally {
bfw.close();
}
3、Properties
读取
//创建properties对象
Properties properties = new Properties();
//加载mysql.properties文件
properties.load(new FileInputStream("mysql.properties"));
//获取username属性的值
String user = properties.getProperty("username");
System.out.println(user);
}
更改写入
//创建properties对象
Properties properties = new Properties();
//保存键值对
properties.setProperty("username","lwd");
//设置保存的文件名和注释
//这是覆盖之前的内容
properties.store(new FileOutputStream("mysql.properties"),"数据库连接");
//追加内容
//properties.store(new FileOutputStream("mysql.properties",true),"数据库连接");