zoukankan      html  css  js  c++  java
  • 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"));    

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

  • 相关阅读:
    DDK 的一些笔记
    C# 32位程序访问64位系统注册表
    自己对设备栈的理解
    简单驱动编写与windbg调试
    DDK 的一些笔记other
    USB设备的一些概念
    C# 32位程序与64位程序读\写注册表的区别
    dbca建库时找不到ASM磁盘
    sf01_什么是数据结构
    cPickle.dump函数
  • 原文地址:https://www.cnblogs.com/htyj/p/7772566.html
Copyright © 2011-2022 走看看