java读取properties文件的几种方法

java读取properties文件的几种方法

大家好,又见面了,我是全栈君。

一、项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 

1、通过java.util.Properties读取 

Java代码  
收藏代码

  1. Properties p=new Properties();  
  2. //p需要InputStream对象进行读取文件,而获取InputStream有多种方法:  
  3. //1、通过绝对路径:InputStream is=new FileInputStream(filePath);  
  4. //2、通过Class.getResourceAsStream(path);  
  5. //3、通过ClassLoader.getResourceAsStream(path);   
  6. p.load(InputStream is);  
  7. is.close();  
  8. p.getString(String(key))  

2、通过java.util.ResourceBundle读取 

Java代码  
收藏代码

  1. ResourceBundle rb=ResourceBundle.getBundle(packageName);  
  2. rb.getString(String key);  

二、Class.getResourceAsStream与ClassLoader.getResourceAsStream的区别 

首先,Java中的getResourceAsStream有以下几种: 

1. Class.getResourceAsStream(String path) : path 不以’/’开头时默认是从此类所在的包下取资源,以’/’开头则是从ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由 ClassLoader获取资源。 

2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/’开头,最终是由ClassLoader获取资源。 

3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/’开头无所谓,当然这和具体的容器实现有关。 

4. Jsp下的application内置对象就是上面的ServletContext的一种实现。 

其次,getResourceAsStream 用法大致有以下几种: 

第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类me.class ,同时有资源文件myfile.xml 

那么,应该有如下代码: 

me.class.getResourceAsStream(“myfile.xml”); 

第二:在me.class目录的子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml 

那么,应该有如下代码: 

me.class.getResourceAsStream(“file/myfile.xml”); 

第三:不在me.class目录下,也不在子目录下,例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml 

那么,应该有如下代码: 

me.class.getResourceAsStream(“/com/x/file/myfile.xml”); 

总结一下,可能只是两种写法 

第一:前面有 “   / ” 

“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject 

me.class.getResourceAsStream(“/com/x/file/myfile.xml”); 

第二:前面没有 “   / ” 

代表当前类的目录 

me.class.getResourceAsStream(“myfile.xml”); 

me.class.getResourceAsStream(“file/myfile.xml”); 

最后,自己的理解: 

getResourceAsStream读取的文件路径只局限与工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。 

错误: 

class.getClassLoader().getResource(“*********”);这一句抛出空指针异常java.lang.NullPointerException,定位为getClassLoader()返回null 

如果一个类是通过bootstrap 载入的,那我们通过这个类去获得classloader的话,有些jdk的实现是会返回一个null的, 

解决: 

修改代码如下: 

Java代码  
收藏代码

  1. InputStream inputStream;        
  2. ClassLoader cl = XXX. class .getClassLoader();        
  3. if  (cl !=  null ) {        
  4.          inputStream = cl.getResourceAsStream( “xx.properties” );        
  5. }  else {        
  6.          inputStream = ClassLoader.getSystemResourceAsStream( “xx.properties” );        
  7. }        
  8. Properties dbProps =  new  Properties();        
  9. dbProps.load(inputStream);        
  10. inputStream.close();   

所以保险起见我们最好还是使用我们自己写的类来获取classloader,这样一来就不会有问题。 

 

转载于:https://www.cnblogs.com/Syria/p/6339236.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108683.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PowerBuilder — 条码打印

    PowerBuilder — 条码打印#使用ocx控件使用微软的MSBCODE9.OCX,但是注册老不成功,需要安装office之后才能注册成功,不知道有没有好的处理方法??#使用字体字体下载:http://download.csdn.net/detail/easyboot/9452777字符转换:代码来源http://club.excelhome.net/thread-606919-1-1.html…

    2022年7月26日
    15
  • 微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理

    微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理微服务架构的实现首先需要提供一些基础组件,这些基础的功能性组件主要包括服务之间的通信、面向事件驱动的架构设计方法、负载均衡、服务路由、API网关和分布式配置中心等,我们对这六大基本组件进行初步的分析定案。一、服务通信:网络连接+IO模型+可靠性+同步与异步对于微服务而言,网络通信主要关注于网络连接、IO模型、可靠性设计及服务调用方式。1.网络连接一般,基于TCP网络连接有两种基本方…

    2022年4月27日
    72
  • ps磨皮滤镜portraiture3 激活成功教程方法

    ps磨皮滤镜portraiture3 激活成功教程方法PortraitureforMac激活成功教程版是Photoshop上一款支持自动皮肤平滑、愈合和增强效果的磨皮插件,这款portraiture磨皮滤镜主要针对人像进行皮肤修饰、磨皮润色等处理,portraituremac激活成功教程版还可以平滑和去除缺陷,同时保留皮肤纹理和重要的人像细节,功能十分强大,这里带来赶紧portraiture激活成功教程版安装方法。portraiture激活成功教程方法下载…

    2022年7月22日
    154
  • 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办…

    准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办…有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次打开:服务和应用程序—-服务。找到右侧的:windowsUpdate;3、鼠标双击windowsupdate,打开属性启动类型选:禁用,这样就关…

    2022年6月15日
    252
  • python学习笔记——hashlib模块「建议收藏」

    python学习笔记——hashlib模块「建议收藏」上篇:https://blog.csdn.net/qq_42489308/article/details/89813895hashlibHash,译做“散列”,也有直接音译为“哈希”的。把任意长度的输入,通过某种hash算法,变换成固定长度的输出,该输出就是散列值,也称摘要值。该算法就是哈希函数,也称摘要函数。MD5是最常见的摘要算法,速度很快,生成结果是固定的16字节,通常用一个32…

    2022年6月11日
    23
  • 配对t检验的应用条件是什么_配对t检验在实际工作中的应用[通俗易懂]

    配对t检验的应用条件是什么_配对t检验在实际工作中的应用[通俗易懂](r:相关系数)双样本t时用此公式计算标准误:→三、成组t检验:适用于完全随机设计的两均值比较,要求个体之间相互独立,两组资料均服从正态分布且方差齐性,即为标准的双样本t检验。四、我们重点来看一下,配对t检验,配对t检验从设计上分为3种情况,如下:1、自身配对设计:选择K个受试者,分别在甲、乙两个不同的试验条件(即某个因素的两个水平)下,测出每个受试者同一个指标的两个数值,并把它们配成一对。2、同…

    2022年6月19日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号