java 如何读取properties文件

网友投稿 262 2022-11-14


java 如何读取properties文件

1.情景展示

将要访问的接口地址等常用的配置添加到properties文件中,比直接写到java类中的好处在于:

当我们需要修改相应配置时,直接修改properties文件,重启tomcat即可,避免了重新编译引用该配置的java文件,同时,也便于项目的维护。

方式一

通过spring的工具类PropertiesLoaderUtils来实现对properties文件的解析

所需jar包:spring的核心jar包,spring-core-版本号.jar

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import java.util.Properties;

import org.springframework.core.io.support.PropertiesLoaderUtils;

/**

* 借助spring读取Properties文件

* @explain Spring 提供的 PropertiesLoaderUtils

* 允许您直接通过基于类路径的文件地址加载属性资源 最大的好处就是:实时加载配置文件,修改后立即生效,不必重启

* @author Marydon

* @creationTime 2018年5月23日上午9:58:59

* @version 1.0

* @since

* @email marydon20170307@163.com

*/

public class PropertiesUtils {

/**

* 读取properties文件

* @param fileName properties文件名及所在路径

* @explain 参数说明

* 1.传递的参数不是properties类型文件,不会报错,返回的是空Map;

* 2.传递的参数是根本不存在的properties文件,也不会报错,返回的是空Map;

* 3.传递的参数可以带路径,可以正常解析到

* @return

*/

public static Map readProperties(String fileName) {

Map resultMap = new HashMap();

try {

Properties props = PropertiesLoaderUtils.loadAllProperties(fileName);

for (Object key : props.keySet()) {

resultMap.put(key.toString(), props.get(key).toString());

}

} catch (IOException e) {

e.printStackTrace();

}

return resultMap;

}

/**

* @param args

*/

public static void main(String[] args) {

// Map map = readProperties("base/web/imageInfo/fileRootDirectories.properties");

Map map = readProperties("fileRootDirectories.properties");

for (Object key : map.keySet()) {

System.out.println(key.toString() + "=" + map.get(key).toString());

}

// 打印结果

// fileRootPath=uploadFiles

}

}

这种方式的缺点在于:

每次调用都要重新解析对应的properties文件,所以,我们可以在项目启动的时候,就把该文件加载到内存中(一次加载解析,永久使用)。

方式二

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

/**

 * properties文件工具类

 * @description

 * 在该类被加载的时候,它就会自动读取指定位置的配置文件内容并保存到静态属性中,高效且方便,一次加载,可多次使用

 * @author: Marydon

 * @date: 2020年07月13日 0013 16:04

 */

public class PropertyUtils_old {

   private static Logger logger = LoggerFactory.getLogger(PropertyUtils_old.class);

   // 待解析的properties文件名称

   private static final String FILE_NAME = "bill.properties";

   // 用于接收解析过properties文件

   private static Properties props;

 

   // 静态代码块:在该类被加载到内容中时,该代码块会执行

   static {

       // 静态代码块执行时将要执行的方法

       loadPropertiesFile();

   }

 

  &nbsphttp://;synchronized static private void loadPropertiesFile() {

       logger.debug("开始加载properties文件内容.......");

       props = new Properties();

       InputStream in = null;

       try {

           // 方式一:通过类加载器进行获取properties文件流(不用添加路径)

   &nbspcPniWFg;       in = PropertcPniWFgyUtils_old.class.getClassLoader().getResourceAsStream(FILE_NAME);

           // 方式二:通过类进行获取properties文件流(需要加/)

           // in = PropertyUtils.class.getResourceAsStream("/bill.properties");

           props.load(in);

       } catch (NullPointerException e) {

           logger.error("bill.properties文件未找到!");

       } catch (IOException e) {

           logger.error("出现IOException!");

       } finally {

           try {

               if (null != in) {

                   in.close();

               }

           } catch (IOException e) {

               logger.error("bill.properties文件流关闭出现异常");

           }

  &nbspcPniWFg;    }

       logger.info("加载properties文件内容完成...........");

       logger.info("properties文件内容:" + props);

   }

 

   /*

    * 获取properties文件中指定key的value

    * @date: 2020年07月13日 0013 16:17

    * @param: key

    * @return: java.lang.String

    */

   public static String getProperty(String key) {

       if (null == props) {

           loadPropertiesFile();

       }

       return props.getProperty(key);

   }

 

   /*

    * 获取properties文件中指定key的value

    * @date: 2020年07月13日 0013 16:17

    * @param: key

    * @param: defaultValue

    * @return: java.lang.String

    */

   public static String getProperty(String key, String defaultValue) {

       if (null == props) {

           loadPropertiesFile();

       }

       return props.getProperty(key, defaultValue);

   }

}

测试

public static void main(String[] args) {

    System.out.println(getProperty("bill.czInterfaceAddress"));

}

方式一也可以按照方式二的形式,来达到一次加载,永久使用的效果。

以上就是java 如何读取properties文件的详细内容,更多关于java 读取properties文件的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:maven多profile 打包下
下一篇:Java单链表的简单操作实现教程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~