热门标签 | 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文件的资料请关注其它相关文章!


推荐阅读
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 标题: ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文总结了淘淘商城项目的功能和架构,并介绍了传统架构中遇到的session共享问题及解决方法。淘淘商城是一个综合性的B2C平台,类似京东商城、天猫商城,会员可以在商城浏览商品、下订单,管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。商城的架构包括后台管理系统、前台系统、会员系统、订单系统、搜索系统和单点登录系统。在传统架构中,可以采用tomcat集群解决并发量高的问题,但由于session共享的限制,集群数量有限。本文探讨了如何解决session共享的问题。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • SpringMVC工作流程概述
    SpringMVC工作流程概述 ... [详细]
  • PHP函数实现分页含文本分页和数字分页【PHP】
    后端开发|php教程PHP,分页后端开发-php教程最近,在项目中要用到分页。分页功能是经常使用的一个功能,所以,对其以函数形式进行了封装。影视网源码带充值系统,vscode配置根 ... [详细]
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社区 版权所有