日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

classpath和读取resources目录下的文件

發(fā)布時(shí)間:2024/10/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 classpath和读取resources目录下的文件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在springboot+maven的項(xiàng)目中去讀取資源文件的時(shí)候,報(bào)了找不到文件的錯(cuò)誤。由此展開(kāi)了對(duì)maven項(xiàng)目編譯前和編譯后的目錄結(jié)構(gòu)的了解,以及對(duì)java的classpath的理解。

首先,由Maven構(gòu)建的web工程,java代碼放在src/main/java路徑下,資源(配置文件等)放在src/main/resources路徑下,當(dāng)構(gòu)建jar包 或 war包時(shí),JVM虛擬機(jī)會(huì)自動(dòng)編譯java文件為class文件存放在 target/classes目錄下,resource資源下的文件會(huì)原封不動(dòng)的拷貝一份到 target/classes 目錄下:而我們一般取的classpath就是target/classes目錄

你可以通過(guò)這種方式打印你的calsspath

A.class.getClassLoader().getResource("").getPath();

這里又引出一個(gè)話題,我們可以根據(jù)兩種不同的方式去獲取Resources下的文件

1、class.getResource()

import org.junit.jupiter.api.Test;public class ResourceTestDemo {@Testvoid getResourceTest(){System.out.println(ResourceTestDemo.class.getResource(""));System.out.println(ResourceTestDemo.class.getResource("/"));}

打印結(jié)果:

1、file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/3.txt 2、file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/test/2.txt


結(jié)果分析:
1、getResource("")不帶"/“時(shí)候是從當(dāng)前類所在包路徑去獲取資源
2、getResource("/")帶”/"時(shí)候是從classpath的根路徑獲取

2、getClassLoader().getResource()

@Testvoid getClassLoaderResourceTest(){System.out.println(ResourceTestDemo.class.getClassLoader().getResource(""));System.out.println(ResourceTestDemo.class.getClassLoader().getResource("/"));}

打印結(jié)果:

file:/Users/qinzhen/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/test-classes/ null

class.getResource()不帶"/"時(shí)候是從當(dāng)前類所在包路徑去獲取資源
class.getResource()帶"/"時(shí)候是從classpath的根路徑獲取
class.getResource()本質(zhì)上也是調(diào)用了getClassLoader,只是封裝了一層方便了我們使用而已
getClassLoader().getResource("")不帶"/"時(shí)候是從classpath的根路徑獲取
getClassLoader().getResource("/")路徑中無(wú)法帶有"/"
getResourceAsStream() 方法僅僅是獲取對(duì)應(yīng)路徑文件的輸入流,在路徑的用法上與getResource()一qu

4、批量讀取:

如果想要批量讀區(qū)resource下的文件呢?

Resource[] resources = ResourceTestDemo.class.getClassLoader().getResources("validator-config/*.xml"); for (int i = 0; i < resources.length; i++) {InputStream inputStream = resources[i].getInputStream();String xmlContent = IOUtils.toString(inputStream, "UTF-8");System.out.println("content" + i + "=" + xmlContent); }

5、如果配置文件中要引用這個(gè)文件的路徑呢?

用classpath:xxx.xml 就可以了(xxx.xml放在resources目錄下)。注意是springboot的項(xiàng)目

如果還是取不到,看看你的maven工程的pom文件是否做了過(guò)濾文件,比如.keystore文件

<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering><excludes><exclude>*.keystore</exclude></excludes></resource><resource><directory>src/main/resources</directory><filtering>false</filtering><includes><include>*.keystore</include></includes></resource></resources> </build>

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的classpath和读取resources目录下的文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。