class.getResourceAsStream与class.getClassLoader().getResourceAsStream区别
1、基本使用:
創(chuàng)建一個配置文件classloaderResource.properties用于數(shù)據(jù)讀取,以及一個測試類GetResourceTest
兩種用法:
1:類名.class.getClassLoader().getResourceAsStream(“文件名”) | 一般為key-value形式的文件,如.properties
2:類名.class.getResourceAsStream(“文件名”)
2、兩種方法區(qū)別
1:類名.class.getClassLoader()相當(dāng)于從classpath下開始讀取;
2:類名.class.getResourceAsStream(“文件名”)從當(dāng)前類所在路徑下讀取。
Scene1: classloaderResource.properties文件放在根目錄下:
類名.class.getClassLoader() 需要使用以下代碼讀取
InputStream inputStream = GetResourceTest.class.getClassLoader().getResourceAsStream("classloaderResource.properties");而使用 類名.class.getResourceAsStream(“文件名”)則需要
InputStream inputStream = GetResourceTest.class.getClassLoader().getResourceAsStream("/classloaderResource.properties");Scene2: classloaderResource.properties文件放在包中時:
類名.class.getClassLoader() 需要使用以下代碼讀取(src下第一層包名開始)
而使用 類名.class.getResourceAsStream(“文件名”)則需要
InputStream inputStream = GetResourceTest.class.getResourceAsStream("classloaderResource.properties");踩坑
今天在該項目下新建了一個Module,然后在該Module的gson包下新建了一個json文件,使用上述方式死活讀不到,NullPointerException異常!json文件移到resources文件夾中可以讀取,啊,這,莫非,上述這種模式只能在該項目下(非Module)才能正常?所以非java文件統(tǒng)一規(guī)范放到resources目錄下(子文件夾也不會報錯),以減少不必要的錯誤。
總結(jié)
以上是生活随笔為你收集整理的class.getResourceAsStream与class.getClassLoader().getResourceAsStream区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用线程池为线程创建一个守护线程
- 下一篇: snakeyaml读取yaml/yml配