属性集介绍:
集合家族中有个成员java.util.Properties
,它继承于Hashtable
。Properties
是使用键值结构存储数据的,但它最大的特点是具有持久化功能。(持久化:内存—>硬盘,持久化的过程必须依赖于IO流)
对IO流不太理解的可以看看小编之前写过的文章(链接在下面)
(17条消息) Java细节问题归纳与总结(五)_淡淡的粉红色的博客-CSDN博客
运用键值对存储数据:
常用API:
-
public Properties()
:创建一个空的属性列表。
-
public Object setProperty(String key, String value)
: 保存一对属性。
-
public String getProperty(String key)
:使用此属性列表中指定的键搜索属性值。
-
public Set<String> stringPropertyNames()
:所有键的名称的集合。
-
public void load(InputStream inStream)
: 从字节输入流中读取键值对数据。
-
public void store(OutputStream out,String comments)
:从字节输入流中存储键值对数据。
属性集的用法:
1、将数据保存到.properties文件中
public static void main(String[] args) throws IOException {
//创建对象
Properties properties = new Properties();
//添加数据
properties.put("name","陈冠希");
properties.put("age","18");
//修改数据
properties.put("name","太阳");
//获取数据
// System.out.println(properties.getProperty("name"));
//删除数据
// properties.remove("name");
// System.out.println(properties);
//持久化
//获取当前Demo1类所在的目录+system.properties
String path = System.getProperty("user.dir") + "/20230207-异常与io-day02/src/com/bailiban/demo6/system.properties";
FileOutputStream out = new FileOutputStream(path);
properties.store(out,"");
}
运行结果:
注意:在获取当前Demo1类所在的目录+system.properties的时候,拼接目录时需要加上模块名/20230207-异常与io-day02,因为idea是单项目、多模块的,我是在模块下编写代码的,所以还需要加上模块名,否在会出现运行报错(系统找不到指定的路径)。
2、从.properties中读取数据
/**
* 通过properties对象读取properties文件中的数据
* @param args
*/
public static void main(String[] args) throws IOException {
//创建对象
Properties properties = new Properties();
//获取当前目录中的system.properties文件
InputStream inputStream = Demo2.class.getResourceAsStream("system.properties");
//从I流中读取数据到properties对象中
properties.load(inputStream);
System.out.println(properties);
}
运行结果:
获取项目路径的3种方式:
1、方式一
public static void main(String[] args) {
//方式一:获取Demo3的类文件所在目录中的system.properties
String path = Demo3.class.getResource("system.properties").getPath();
System.out.println(path);
}
运行结果:
注意:此方式只能获取.class文件,不能获取.java文件,因为获取的是bin目录下的,不是src目录下的。
当文件处于Demo3的类文件的父类中时,可以使用“../”返回上一级目录,同样也是使用第一种方式
String path = Demo3.class.getResource("../123.txt").getPath();
System.out.println(path);
2、方式二
使用类加载器(getClassLoader()),从项目的根路径开始查找(src路径开始),直接写文件名即可。
//方式二:使用类加载器,从项目的根路径开始查找(src路径开始)
String path = Demo3.class.getClassLoader().getResource("123.txt").getPath();
System.out.println(path);
运行结果:
3、方式三
上两种方式获取的都是bin目录下的路径,如果要获取src目录下的路径,需要使用方法三
//到右括号)位置路径是项目的根路径,不跟bin,也不跟src
//要获取文件的具体位置,需要进行路径的字符串拼接
String path = System.getProperty("user.dir") + "/20230207-异常与io-day02/src/123.txt"; //"user.dir"是固定写法
System.out.println(path);
运行结果:
注意:以上三种获取项目路径的方式必须100%掌握,在以后的学习中会经常用到。