Java IO(Properties/对象序列化/打印流/commons

Java IO(Properties/对象序列化/打印流/commons-io) Properties

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串

主要方法

setProperty等同与Map接口中的put , setProperty(String key, String value)

通过键获取值, getProperty(String key)

load() 加载配置文件, 加载完毕以后可以通过 getProperty(String key) 取出对应的值

构造方法

- load(InputStream in) - load(Reader r)

示例

Properties pro = new Properties(); FileReader fr = new FileReader("c:\\pro.properties"); //调用集合的方法load,传递字符输入流 pro.load(fr); String name = pro.getProperty("name"); fr.close(); System.out.println(pro);

store() 将Properties中的键值对写入到文件中保存

构造方法

- store(OutputStream out,String common) - store(Writer w,String common)

示例

Properties pro = new Properties(); pro.setProperty("name", "zhangsan"); pro.setProperty("age", "31"); pro.setProperty("email", "123456789@163.com"); FileWriter fw = new FileWriter("c:\\pro.properties"); //键值对,存回文件,使用集合的方法store传递字符输出流 pro.store(fw, ""); // 后面一个为注释 fw.close();

对象的序列化与反序列化

序列化为将对象的信息存储到文件中,反序列化为将文件存储的对象信息读取出来.

ObjectOutputStream(对象序列化)

构造方法

- ObjectOutputStream(OutputStream out)

主要方法

- writeObject(Object obj)写出对象的方法

示例

//创建字节输出流,封装文件 FileOutputStream fos = new FileOutputStream("c:\\person.txt"); //创建写出对象的序列化流的对象,构造方法传递字节输出流 ObjectOutputStream oos = new ObjectOutputStream(fos); Person p = new Person("lisi",25); //调用序列化流的方法writeObject,写出对象 oos.writeObject(p); oos.close(); ObjectInputStream(对象反序列化)

构造方法

- ObjectInputStream(InputStream in) // 传递任意的字节输入流,输入流封装文件,必须是序列化的文件

主要方法

- Object readObject() 读取对象 , 读取出来的对象为Object

示例

FileInputStream fis = new FileInputStream("c:\\person.txt"); //创建反序列化流,构造方法中,传递字节输入流 ObjectInputStream ois = new ObjectInputStream(fis); //调用反序列化流的方法 readObject()读取对象 Object obj =ois.readObject(); System.out.println(obj); ois.close(); 序列化与反序列化过程中注意事项

静态变量不能被序列化 因为序列化是把对象数据进行持久化存储,而静态的东西不属于对象,而属于类

transient(瞬态)关键字,被transient修饰的成员变量不会被序列化

Serializable接口, 需要序列化的类必须实现这个接口才可以被序列化

序列化中的序列号冲突问题, 对象实现Serializable接口接口后,会给对象创建一个serialVersionUID用作标识对象,如果更改了源代码,则这个表示会改变, 在反序列化的时候java会对比文件和类的的标识是否对应,如果不对应就会报错

解决方法 : 给类自定义serialVersionUID, private static final long serialVersionUID = 1478652478456L;

打印流

只负责输出数据,使它们能够方便地打印各种数据值表示形式.

打印流的分类

PrintStream

PrintWriter

打印流的特点

不负责数据源,只负责数据目的(只提供输操作)

永远不会抛出IOException,但是可能抛出别的异常

两个打印流的方法,完全一致

构造方法,就是打印流的输出目的端

PrintStream构造方法 : 接收File类型,接收字符串文件名,接收字节输出流OutputStream

PrintWriter构造方法 : 接收File类型,接收字符串文件名,接收字节输出流OutputStream, 接收字符输出流Writer

主要方法

- void print(String str): 输出任意类型的数据, print和println是原样输出,不去对照码表 - void println(String str): 输出任意类型的数据,自动写入换行操作 - void write() ; 向文件中写入字节, 方法使用和ava.io.Writer一致

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f714eb638a1baaa3614a44388a1b38e4.html