1.继承关系
java.lang.Object
继承者 java.util.Dictionary<K,V>
继承者 java.util.Hashtable<Object,Object>
继承者 java.util.Properties
2.特性
Properties
1.继承与Hashtable,所以是线程安全的键值对存储结构
2.可保存在流中或从流中加载
3.不同于Hashtable,Hashtable可保存object对象的键值对,Properties只能保存字符串类型的键值对
3.常用方法:
setProperty(String key, String value) 调用 Hashtable 的方法 put。
getProperty(String key, String defaultValue) 用指定的键在属性列表中搜索属性。
list(PrintWriter out) 将属性列表输出到指定的输出流
load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符
4.实际使用
在src目录下,创建一个prop.properties文件,里面写上key=value的键值对数据,然后进行load加载,比如jdbc信息
代码1:设置和获取key-value
import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.util.Properties;import java.util.Set;public class Main_Properties { public static void main(String[] args) { Properties prop=new Properties(); prop.setProperty("name", "张三"); prop.setProperty("age" , "10"); System.out.println(prop); /** * 输出: * {age=10, name=张三} * */ String name=prop.getProperty("name"); String age =prop.getProperty("age"); String id =prop.getProperty("id"); System.out.println("name : "+name+",age :"+age+",id : "+id); /** * 输出 * name : 张三,age :10,id : null * */ PrintWriter pw=null; try { pw=new PrintWriter(new FileWriter("E:/0326.txt"),true); Set<Object> set=prop.keySet(); for(Object obj:set) { String key = (String) obj; String value = prop.getProperty(key); pw.println(key+":"+value); /** * 文件中输出内容 * 1 age:10 * 2 name:张三 * 3 会多出一行空行,pw.println导致 * */ } } catch (IOException e) { System.out.println("【异常】: IO错误"); } finally { if(pw!=null) { pw.close(); } } System.out.println("end"); }}
代码2:写入文件中
import java.io.FileNotFoundException;import java.io.PrintWriter;import java.util.Properties;public class Main_Properties_List { public static void main(String[] args) { Properties prop=new Properties(); prop.setProperty("name", "张三"); prop.setProperty("age" , "10"); PrintWriter pw=null; try { pw=new PrintWriter("E:/0326_2.txt"); prop.list(pw); /** * 文件写入内容,默认间隔符是等号 * 1 -- listing properties -- * 2 age=10 * 3 name=张三 * 4 <多出一行空行> * */ } catch (FileNotFoundException e) { System.out.println("【异常】:未找到文件"); } finally { if(pw!=null) { pw.close(); } } System.out.println("end"); }}
代码3:从文件中加载属性
import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.Properties;public class Main_Properties_Load { public static void main(String[] args) { Properties prop=new Properties(); FileReader fr =null; try { fr =new FileReader("E:/1.txt"); /** * 文件内容 * name=www * age=30 * city@大连 <这行使用的不是默认标准的分隔符> * daxue:工大 <这行使用的不是默认标准的分隔符> * */ prop.load(fr); String name =prop.getProperty("name"); String age =prop.getProperty("age"); String city =prop.getProperty("city"); String daxue=prop.getProperty("daxue"); System.out.println("name="+name+",age="+age+",city="+city+",daxue="+daxue); /** * <输出内容> * name=www,age=30,city=null,daxue=工大 * */ } catch (FileNotFoundException e) { System.out.println("【异常】文件未找到"); } catch (IOException e) { System.out.println("【异常】IO"); } finally { if(fr!=null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
代码4:带注释存储到文件中
import java.io.FileWriter;import java.io.IOException;import java.util.Properties;public class Main_Properties_Store { public static void main(String[] args) { Properties prop=new Properties(); prop.setProperty("name", "张三"); prop.setProperty("age" , "10"); FileWriter fw=null; try { fw=new FileWriter("E:/0326_3.txt"); prop.store(fw, "这里是注释"); /** * 文件写入内容 * 1 #\u8FD9\u91CC\u662F\u6CE8\u91CA 这行是"这里是注释" * 2 #Mon Mar 26 20:53:18 CST 2018 这行是自动生成的时间 * 3 age=10 * 4 name=张三 * 5 <多出一行空行> * */ } catch (IOException e) { System.out.println("【异常】IO"); } finally { if(fw!=null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("end"); }}
共同学习,写下你的评论
评论加载中...
作者其他优质文章