• java之获取资源文件


    背景介绍

        在java程序中有时我们需要加载项目中的某些资源文件(如:config.properties之类),以便获取里面的值,这样可以避免某些需要经常修改的数据硬编码入业务程序中

    实现方式

        实现这种方式需求其实有很多种方式,下面简单介绍三种,各陈利弊:

    • 第一种   
         ClassLoader classLoader = this.getClass().getClassLoader();
         Properties prop = new Properties();
         prop.load(classLoader.getResourceAsStream("/Application.properties"));
         prop.get("");//通过此方法获取文件中的值
      弊端
        会发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件
    • 第二种   
         Properties prop = new Properties();
        InputStream is = new FileInputStream(绝对路径);
        prop.load(is);
        prop.get("");//通过此方法获取文件中的值
      弊端:
      此时,FileInputStream不会将.properties保存在缓存中,可以解决上面的问题。但是出现了另一个问题,即绝对路径,会导致程序的通用性不好。这个问题是由于ClassLoader.getResourceAsStream是直接寻找 classes下的文件,FileInputStream则需要用完整的绝对路径,至于FileInputStream为什么一定需要绝对路径自己去找度娘,不在这里累述
    • 第三种
        Properties prop = new Properties();
        String path = Thread.currentThread().getContextClassLoader().getResource("/config").getPath();//只需从资源文件包下的路径写起即可,例如:这里是src/main/resource/config下的文件,所以我就只写了/config
        InputStream is = new FileInputStream(path + "/abutment.properties");
        prop.load(is);
        String httpConnect = ConvertUtil.obj2str(prop.get("httpConnect"));    

      这种方法可以很好解决上面两种问题,是目前比较优的选择

  • 相关阅读:
    实用机器学习 跟李沐学AI
    Explicitly drop temp table or let SQL Server handle it
    dotnettransformxdt and FatAntelope
    QQ拼音输入法 禁用模糊音
    (技术八卦)Java VS RoR
    Ruby on rails开发从头来(windows)(七)创建在线购物页面
    Ruby on rails开发从头来(windows)(十三)订单(Order)
    Ruby on rails开发从头来(windows)(十一)订单(Order)
    新员工自缢身亡,华为又站到了风口浪尖
    死亡汽油弹(Napalm Death)乐队的视频和来中国演出的消息
  • 原文地址:https://www.cnblogs.com/htyj/p/7772566.html
Copyright © 2020-2023  润新知