热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

java如何读取properties文件

这篇文章主要介绍了java如何读取properties文件,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下

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();
   }
 
   synchronized static private void loadPropertiesFile() {
       logger.debug("开始加载properties文件内容.......");
       props = new Properties();
       InputStream in = null;
       try {
           // 方式一:通过类加载器进行获取properties文件流(不用添加路径)
           in = PropertyUtils_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文件流关闭出现异常");
           }
       }
       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文件的资料请关注其它相关文章!


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • PHP 时间与日期工具类:星座、干支、生肖的实现
    本文介绍了一个PHP时间与日期工具类,涵盖了时区设置、有效日期和时间检查、星座、干支、生肖计算等功能。该工具类特别适用于需要处理中国农历及西方星座的应用场景。 ... [详细]
  • PHP插件机制的实现方案解析
    本文深入探讨了PHP中插件机制的设计与实现,旨在分享一种可行的实现方式,并邀请读者共同讨论和优化。该方案不仅涵盖了插件机制的基本概念,还详细描述了如何在实际项目中应用。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • 本文介绍如何将自定义项目设置为Tomcat的默认访问项目,使得通过IP地址访问时直接展示该自定义项目。提供了三种配置方法:修改项目路径、调整配置文件以及使用WAR包部署。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • JavaScript 中创建对象的多种方法
    本文详细介绍了 JavaScript 中创建对象的几种常见方式,包括对象字面量、构造函数和 Object.create 方法,并提供了示例代码和属性描述符的解释。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 使用JS、HTML5和C3创建自定义弹出窗口
    本文介绍如何结合JavaScript、HTML5和C3.js来实现一个功能丰富的自定义弹出窗口。通过具体的代码示例,详细讲解了实现过程中的关键步骤和技术要点。 ... [详细]
author-avatar
扩散平衡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有