Java獲取resource目錄下文件
工作的時候需要讀取resource目錄下的文件,在此記錄一種不會因打包方式影響的讀取方法(直接寫路徑有可能會因為打jar包或者打war包而失效)。
2021/01/11 更新
如果是在Spring環境中,可以使用org.springframework.core.io.ClassPathResource,路徑就是resource的路徑
注意!!!打成jar包只能只能讀取流,不能getFile!!!
並且,在打成jar包時,使用ClassPathResource的getFile或者getPath之類的方式是不能獲得結果的,但是可以使用classPathResource.getInputStream直接讀取到(有點奇怪)
文件放在db2convert
下
String jsonPath = "";
// 文件不存在時,resource為null
URL resource = this.getClass().getClassLoader().getResource("db2convert/" + FILE_NAME);
jsonPath = URLDecoder.decode(resource.getPath(),"UTF-8");
// 如果運行在windows上,獲取到的path會變成"/E:/Convert...",直接使用的話會報錯(會提示:the char ':' is illegal),需要處理一下
Path path = Paths.get(jsonPath.contains(":") ? jsonPath.substring(1) : jsonPath);
然而我並沒有在Linux上測試
需要注意的是class.getClassLoader().getResource()
和class.getResource()
這里使用的是類加載器的getResource()
方法。
具體的區別就是:
class.getClassLoader().getResource()
直接從resources目錄下找,用的是相對路徑,文件名(參數)前面不用加/
;
class.getResource()
是以resources為根目錄的絕對路徑,文件名(參數)前面需要加/
。