- 小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
- spring大家一定都使用过吧。在spring中使用最多的配置文件格式就是yml格式。但是别忘记我们一开始使用的项目的配置文件大多都是properties格式的哦。
- 今天我们来写一套读取properties的格式的文件吧
获取文件
- 关于获取文件的流信息这里就不做介绍了。之前在File专题中我们已经介绍了。这里的读取文件是指读取properties文件内容为键值对存储在map中。
public static Map<Object, Object> getProperties(String propertiesName) {
Properties prop = new Properties();
try {
FileInputStream outIs = new FileInputStream(propertiesName);
if (outIs != null) {
Properties outPro = new Properties();
outPro.load(outIs);
outIs.close();
return outPro;
}
}catch (FileNotFoundException ffe) {
try {
// 读取属性文件base.properties
InputStream in = PropertiesUtil.class.getClassLoader().getResourceAsStream(propertiesName);
prop.load(in); /// 加载属性列表
in.close();
} catch (IOException ie) {
System.out.println(ie);
}
}catch (IOException ie) {
System.out.println(ie);
}
return prop;
}
- 首先我们构建FileInputStream文件流。然后通过Properties类进行加载我们的文件流,信息就会落在我们的Properties对象中。点进源码我们就可以知道Properteis就是map所以直接返回。
- 那么异常中我们写的代码是啥意思呢?因为有时候我们提供的可能并不是一个真实有效的文件地址,有可能是Jar包中的properties类型的文件。这个时候我们就需要借助读resource的方式将文件流内容读出来并加载。
读取指定key内容
- 读取指定key这个功能在上面的功能前提下就会简单很多。为什么这么说呢?上面我们直接读取整个文件的内容到map中,这里我们直接通过map读取key不就出来了吗。但是这里会出现一个问题。我只需要一个key,你却每次都读取整个文件。岂不是大材小用了?
- 但是这种方式又是必须的,不读取所有你就无法获取指定的key的value。 这个时候我们可以加入缓存。在获取整个文件所有内容的时候加入缓存。下次在获取就不需要在获取文件全部数据了。
- 但是涉及到一个问题就是,如果文件更新了怎么办?正常情况下呢,配置文件修改了是需要重启项目的,所以这里我们不考虑这个问题
- 在分布式项目中配置文件是分散的,这也不是我们考虑问题!!!
\