属性文件
属性文件:
cp.properties
gzh=xxx
xxx=gzh
模拟解析属性文件
/*
*.properties 文件, 属性文件
文件内容格式:
key1=value1
key2=value2
......
keyN=valueN
* */
public class Demo01 {
public static void main(String[] args) {
BufferedReader bufferedReader = null;
HashMap<String, String> properties = new HashMap<>();
try {
FileInputStream fileInputStream = new FileInputStream("D:\\peixun\\培训阶段2笔记\\自己笔记\\JavaSE_day15_IO_03\\src\\com\\csoracle\\属性文件1\\cp.properties");
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream,"gbk");
bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line=bufferedReader.readLine())!=null){
String[] strs = line.split("="); // "gzh=xxx" ==> {gzh,xxx}
properties.put(strs[0],strs[1]);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(bufferedReader!=null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Set<Map.Entry<String, String>> entries = properties.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry);
}
}
}
Properties类
继承关系: Properties extends Hashtable implements Map
也有Map和Hashtable的一套API
从这个继承关系可以看出Properties也是用key-value键值对的方式存储数据
key必须为String
value也必须为String
会把数据都看为字符串
两个重要的API
setProperty(String key,String value):
设置一对key和value都是字符串类型的键值对
虽然它提供这个方法,但是我们一般不会手动去设置,
而是调用load(Reader reader)和一个属性文件(*.properties)进行关联,
将属性文件中的key-value键值对进行出来并存储在Properties对象中。
getProperty(String key):
根据key获取value
public class Demo02 {
public static void main(String[] args) {
InputStreamReader inputStreamReader = null;
Properties properties = null;
try {
//造流
FileInputStream fileInputStream = new FileInputStream("D:\\peixun\\培训阶段2笔记\\自己笔记\\JavaSE_day15_IO_03\\src\\com\\csoracle\\属性文件1\\cp.properties");
inputStreamReader = new InputStreamReader(fileInputStream, "gbk");
//解析文件
properties = new Properties();
properties.load(inputStreamReader);
//遍历
Set<Map.Entry<Object, Object>> entries = properties.entrySet();
//第一种遍历方式: toString(); Properties中重新了toString(),该方法可用于遍历
System.out.println(entries);
//第二种和第三种: 因为Properties也是一种Map,所以也可以使用entrySet()和keySet()进行遍历
for (Map.Entry<Object, Object> entry : entries) {
System.out.println(entry);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStreamReader != null) {
try {
inputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
通过类加载器获取到代表cp.properties的流。写cp.properties文件路径的时候使用的相对路径(相对于src而言)
public class Demo03 {
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
InputStream resourceAsStream = Demo03.class.getClassLoader().getResourceAsStream("com/csoracle/属性文件1/cp.properties");
InputStreamReader inputStreamReader = new InputStreamReader(resourceAsStream, "gbk");
properties.load(inputStreamReader);
System.out.println(properties);
}
}

浙公网安备 33010602011771号