Properties常见用法汇总/properties遍历/properties获取系统的属性集合/Properties模拟系统属性集合的操作

时间:2023-02-16 16:55:26
package chenxiao.demo;


import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;


public class Demo4 {
public static void main(String[] args) throws IOException {
/*
* 需要理解掌握:
* Properties:本质上是一个Map集合,存储的是属性,属性以键值对的形式进行存储
* 键值对的值必须是字符串,不需要用泛型,一般与流结合使用
* 优点:1、以键值队形式存储 2、内部封装了大量的方法list,load,store
*/
fun1();// Properties常见用法与遍历
fun2();// 获取系统的属性集合
fun3();// 模拟系统属性集合的操作
}


private static void fun3() throws IOException {
// 1、创建properties对象
Properties properties = new Properties();
// 2、创建输入流
FileReader reader = new FileReader("G:\\1000PHONE\\test.txt");
// 3、将输入流的内容存储到属性集合对象--通过调用load方法实现
properties.load(reader);
// 4、实现打印到控制台
/*
* 注意:properties必须以键值对的形式存在数据,所以文件中最好也是这样的形式XX=YY形式
*/
properties.list(System.out);
// 5、改变内容
properties.setProperty("aa", "ok");
// 6、写回磁盘
FileWriter writer = new FileWriter("temp.txt");
// 7、开始将内容写回
properties.store(writer, "将aa改为了ok");
reader.close();
writer.close();
properties.list(System.out);


}


// 获取系统属性
private static void fun2() {
Properties properties = System.getProperties();
// 遍历属性集合
Set<String> key = properties.stringPropertyNames();
Iterator<String> iterator = key.iterator();
while (iterator.hasNext()) {
String string = (String) iterator.next();
System.out.println("key" + string + "value  " + properties.getProperty(string));
}
System.out.println(properties.get("user.language"));
properties.setProperty("user.language", "ch");
// 改变的是内存里的值
System.out.println(properties.get("user.language"));
Properties properties1 = System.getProperties();
System.out.println(properties1.get("user.language"));
// 在获取一遍的时候,会优先在内存中寻找个属性对应的数据,如果找不到再去文件中寻找


// 将内容打印到控制台
properties.list(System.out);
}


private static void fun1() {
Properties properties = new Properties();
properties.setProperty("01", "java");
properties.setProperty("02", "ios");
properties.setProperty("03", "php");
properties.setProperty("04", "html5");


System.out.println(properties.getProperty("01"));
// 遍历properies中的元素
// properies第一种遍历
Set<String> set = properties.stringPropertyNames();
for (String string : set) {
System.out.println("key" + string + "value  " + properties.getProperty(string));


}
// properies第二种遍历
Set<String> set1 = properties.stringPropertyNames();
Iterator<String> iterator = set1.iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
System.out.println(key + properties.getProperty(key));
}


//properies 第三种遍历
Set<Entry<Object, Object>> entrySet = properties.entrySet();
Iterator<Entry<Object, Object>> iterator2 = entrySet.iterator();
while (iterator2.hasNext()) {
Entry<Object, Object> entry = (Map.Entry<Object, Object>) iterator2.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println(key + value);
}


// 注意点1:当key不存在时候,value返回值为后面的默认值
System.out.println(properties.getProperty("03", "php"));
// 2、跟map一样当给一个key赋予两个值后面的会将前面的覆盖掉
}
}