java基础专栏—Properties
2017-10-21 00:00
204 查看
摘要: 笔者在java学习的这条道路上也是断断续续走了一年多了,视频啊,书籍啊什么的也看了好几遍了,真的是java从入门到放弃啊,哈哈,看的多了一渐渐的明白了一点东西,笔者整理了一些自己的学习笔记,在此与大家分享,不喜勿喷,多多指教,万分感谢。
HashTable的子类,Map集合的方法都可以使用,线程安全
该集合没有泛型,且不能写泛型
它是一个可以持久换的属性集。键值对都可以存储到集合中,也可以存储到持久换的设备,键值的来源都可以是持久化层的设备
和流对象结合使用表示==持久化存储==
必须使用严格的书写规范
等同Map中put
public String getProperties(String key)
通过键获取值
public Set<String> stringPropertyName()
获取集合中的所有的键,类似与Map中的keySet()
Properties的作用:
==用来写配置文件,就可以批量的修改代码,数据库等==
对象的序列化,==以流写对象存储==,
反序列化,以==流读取对象==,
为其他流添加功能
==永不会抛出IOException,但是可能抛出其他Exception==
连个打印流的方法是完全一致的,但是一般使用printWriter,区别在与
必须调用println,printf,format三个方法中的一个来自动刷新
使用反射机制去拿到类的.class文件,得到该类的加载器
Properties
一个持久的属性集。Properties可以保存在流中或从流中加载,Map中每个键和值都对应字符串HashTable的子类,Map集合的方法都可以使用,线程安全
该集合没有泛型,且不能写泛型
它是一个可以持久换的属性集。键值对都可以存储到集合中,也可以存储到持久换的设备,键值的来源都可以是持久化层的设备
和流对象结合使用表示==持久化存储==
必须使用严格的书写规范
key=value
返回值类型 | 方法 | 描述 |
---|---|---|
void | load(InputStream inStream) | 从输入流中读取键值对 |
void | load(Reader reader) | 面向格式的对去键值对 |
void | store(OutputStream out, String commonts) | 将此Properties表中属性写入输出流 |
void | store(Writer writer, String comments) | 将表中的属性写入输出字符 |
|--Object |--Dirctory<K,V> |--HashTable |--Properties 线程安全的键值对集合
Properties集合的存储
public void setProperties(String key, String value)等同Map中put
public String getProperties(String key)
通过键获取值
public Set<String> stringPropertyName()
获取集合中的所有的键,类似与Map中的keySet()
Properties pro = new Propertise(); FileReader fr = new FileReader("xxx.propertise"); pro.load(fr); fr,close() System.out.println(pro);
Properties pro = new Properties(); pro.setProperty("key", "value"); FileWriter fw = new FileWriter("xxx.properties"); pro.store(fw, "为什么要写会数据,不能写中文") //因为默认的comment的编码表是Unicode
Properties的作用:
==用来写配置文件,就可以批量的修改代码,数据库等==
对象的序列化,==以流写对象存储==,
使用ObjectOutputStream实现序列化
反序列化,以==流读取对象==,
使用ObjectInputStream实现反序列化
Serializable
实现此接口的类才可以序列化对象,类都通过实现此接口以达到序列化,并且这个接口没有方法可以重写。序列化的后的对象是看不懂的,这是设计的时候就设计好的,这也是ObjctInputStream存在的意义。
标记型接口
凡是接口中没有任何的方法,只是起一个标记的作用的接口都叫标记型接口。ObjectStream—对象的序列化和反序列化
|--OutputStream |--ObjectOutputStream |--InputStream |--ObjectInputStream public ObjectOutputStream(OutputStream out) public void writeObject(Object obj) public ObjectInputStream(InputStream in) public void readObjcet(Object obj)
public class Person implements Serializable{ private int age; private String name; public String toString(){ } }
对象的序列化
//创建流对象,封装文件对象 FileOutputStream fos = new FileOutputStream("person.txt"); //创建对象的序列化输出流,用ObjectOutputStream的构造方法来输出 ObjectOutputStream oos = new ObjectOutputStream(fos); Person p = new Person("xxx",25); //调用序列化流的输出方法将对象写入文件中 oos.writeObject(p); oos.close();
对象的反序列
//创建流对象 FileInputStream fis = new FileInputStream("person.txt"); //创建反序列化流 ObjectInputStream ois = new ObjectInputStream(ois); //调用读取,读写的都是Object,所以要强转回原来的类型 //ClassNotFoundException,要求序列化对象的.class文件必须存在 Object obj = ois.readObject(); System.out.println(obj); ois.close();
静态不可以序列化
由于静态的变量是属于这个类共享数据,而不属于
对象的私有数据,所以静态的变量是不能写的。但是读写的时候这个属性是使用默认值。
transient关键字
用来指定对象的某个属性不做序列化保存序列号冲突问题
序列号(SerialVersionUId):实现了Serializable的类在编译的时候根据类的定义,对类进行了计算产生了一个序列号,然后会将这个序列号写入ObjectOutputStream流中,在读取的时候,如果类发生了修改,序列号不一样了,就会读取失败,抛出
InvitalException。
自定义序列号
做一个不变的序列号private static final long serialVersionUID = 1234567L;
打印流
不负责数据源,只负责输出,不关心数据从哪来为其他流添加功能
==永不会抛出IOException,但是可能抛出其他Exception==
|--OutputStream |--printStream |--printWriter
连个打印流的方法是完全一致的,但是一般使用printWriter,区别在与
构造器上。对于打印流来说,
构造器就是输出的目的端。
public printStream(File file) public printWriter(File file) public printWriter(OutputStream out, boolean autoflush) public printWriter(String s) public printWriter(Writer w) public void println() public void write()
AutoFlush
打印的对象必须是OutputStream,Writer必须调用println,printf,format三个方法中的一个来自动刷新
Properties配置文件
将class文件给用户做二次开发,将配置文件放在src中,编辑器会将其存储在lib文件中,有些维护比较好的是将配置文件放在远程服务器上,给的jar包中只有一个连接。
//properties.properties use="UserName" passward="PassWard" dbPosition="jdbc:mysql://localhost:3306"
FileInputStream fis = new FileInputStream("properties.propertise");
使用类的加载器去读取配置文件
使用反射机制去拿到类的.class文件,得到该类的加载器
xxx.class.getClassLoader().getResourceAsStream("propertise.propertise") class拿到对应的类的 getClassLoader()拿到的类的加载文件 getResourceAsStream(String fileName);拿到对应资源文件下的文件
相关文章推荐
- Java基础--IO流之Properties
- java基础50 配置文件类(Properties)
- 黑马程序员--Java基础学习(IO流--File对象和Properties)第二十天
- java_基础Properties
- java基础专栏—ArrayFrame(1)
- Java基础之IO流,打印系统信息至标准输出设备或文件中Properties.list()
- JAVA基础学习day21--IO流三-File、Properties、PrintWriter与合并、分割流
- java基础学习总结——java读取properties文件总结
- 黑马程序员——Java基础知识——IO(Properties、打印流、IO其他类、字符编码)
- Java基础知识强化之IO流笔记68:Properties和IO流集合使用
- java语言基础(87)——Properties的概述与使用
- 增加java基础——properties
- Java基础--IO流03(File类,Properties,递归,打印流,序列流)
- JAVA基础学习(二十一)--IO流三-File、Properties、PrintWriter与合并、分割流
- java基础复习(集合、泛型、IO流、多线程、Junit 、内省 、Properties、 路径问题)
- Java基础知识强化之IO流笔记69:Properties练习之 判断文件中是否有指定的键,如果有就修改值的案例
- Java基础知识强化之IO流笔记70:Properties练习之 如何让猜数字小游戏只能玩5次的案例
- Java学习基础组件---Properties文件的读取
- java基础—Properties集合