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

1、通过java.util.Properties读取

1 Properties p=newProperties();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读取

ResourceBundle rb=ResourceBundle.getBundle(packageName);

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的,

解决:

修改代码如下:

InputStream inputStream;

ClassLoader cl= XXX. class.getClassLoader();if (cl != null) {

inputStream= cl.getResourceAsStream( "xx.properties");

}else{

inputStream= ClassLoader.getSystemResourceAsStream( "xx.properties");

}

Properties dbProps= newProperties();

dbProps.load(inputStream);

inputStream.close();

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

java读取properties文件_java读取properties文件的几种方法相关推荐

  1. java list初始化数据_Java中初始化List的5种方法 /List的2种去重方式

    前言 List是java重要的数据结构之一,我们经常接触到的有ArrayList.Vector和LinkedList三种,他们都继承来自java.util.Collection接口,类图如下: 1.构 ...

  2. java 图片 白边_java 去除图片白边 两种方法的比较

    swt 下的图片处理: ImageData ideaImageData = new ImageData(path); ideaImageData = getWhite(ideaImageData); ...

  3. java 取随机整数_Java获取随机整数的两种方法

    方式一: 使用 Random 类 举例:获取 0~3 范围内(包括 0 和 3 )的 int 类型的随机数 Random random = new Random(); System.out.print ...

  4. java中比较两个文件的大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  5. java获取文件大小_Java实现获取文件大小的几种方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 目前Java获取文件大小的方法有两种: 1.通过file的length()方法获取: 2.通过流式方法获取: 通过流式方法又有两种,分别是旧的java.i ...

  6. 用python修改文件内容修改txt内容的3种方法

    用python修改文件内容修改txt内容的3种方法 方法一.修改原文件方式 def updateFile(file,old_str,new_str):"""替换文件中的字 ...

  7. 多个PDF文件如何合并成一个?两种方法轻松get

    在日常学习生活中,如果你需要将多个文档整合为一个完整的文件,比如说多篇文章.多张图片.多个表格等等,这时候就需要将这些文档合并成一个PDF文件.如何将多个PDF文件如何合并成一个?两种方法轻松帮你搞定 ...

  8. attrib批量显示文件夹_电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决!...

    原标题:电脑中病毒,文件夹全部变成快捷方式?3种方法轻松解决! 最近有位朋友去打印店的时候,u盘一不小心就带回了1KB快捷方式病毒,导致电脑u盘里的文件以及文件夹全部变成了快捷方式,不知道如何解决. ...

  9. 剪切的文件丢失如何找回?这四种方法可试

    剪切文件相当于在设备中进行文件删除,而一旦剪切过程中出现错误就容易造成源文件丢失.那么剪切文件丢失如何恢复?下面将分享剪切丢失文件恢复的方法,均以win10系统为例进行操作. ▌第一种方法:撤销移动 ...

  10. amr文件怎么转换成mp3,5种方法供你选择

    amr文件怎么转换成mp3?如果你常常使用手机录音或下载手机铃声,那么AMR格式对你来说一定不会陌生.因为amr文件的资源占用率低.传输方便,通常用作各大手机厂商广泛使用的一种保存录音文件的格式,非常 ...

最新文章

  1. Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)
  2. python merge很费内存吗,python如何使用merge实现堆
  3. linux:配置jdk环境变量
  4. Annotation注解(有源代码)
  5. 区块链BaaS云服务(14)华大BGI区块链“概论“
  6. Mac OS X 安装教程
  7. 嵌入式实时系统程序开发一:按键程序编写
  8. 日志文件在VS中输出为乱码问题
  9. 〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
  10. 对数周期天线hfss建模_HFSS也有金手指,FADDM招式详解
  11. java入门基础重要知识必考考点
  12. 如何使用迅雷下载电骡的资源
  13. mysql windows下连接linux下的mysql
  14. c++ 链表快速查找
  15. CSS 小技巧:如何保留 hover 的状态?
  16. excel学习-选择性粘贴(转置+跳过空白单元格+运算)
  17. biostar handbook(十一)|基因组变异的表示形式
  18. python查看微信撤回消息_Python查看微信撤回消息代码
  19. W10应用商店Microsoft Store的安装
  20. 查看caj文件与chm文件

热门文章

  1. 伤仲永 - 公司人才培养感悟
  2. Java基础编程题目——接口应用,display()函数显示消息
  3. 无人机图像语义分割数据集(aeroscapes数据集)使用方法
  4. Windows误操作删除或取消Authenticated Users所有权限如何补救
  5. python中pylint使用方法(pylint代码检查)
  6. 1.1 一元线性回归分析案例
  7. 被讨厌的勇气:目的论
  8. render_template
  9. Android 11源码——安全策略SELinux关闭
  10. ubuntu关闭色linux防火墙,ubantu 14 关闭防火墙 SELinux