配置文件获取那些事

385 阅读2分钟

前言

  • 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。 这个时候我们可以加入缓存。在获取整个文件所有内容的时候加入缓存。下次在获取就不需要在获取文件全部数据了。
  • 但是涉及到一个问题就是,如果文件更新了怎么办?正常情况下呢,配置文件修改了是需要重启项目的,所以这里我们不考虑这个问题
  • 在分布式项目中配置文件是分散的,这也不是我们考虑问题!!!

\