我有一个具有这种结构的maven项目:
parent
-----module1
--------src
------------main
-----------------java
----------------------Loader.java
-----------------resources
-------------------------file1.txt
-----module2
--------src
------------main
-----------------java
-------------------------CallLoader.java
所以Loader.java
,加载files1.txt
。我从module2的CallLoader.java
调用此类。这是我用的代码
在Loader.java
,
private static File getResourceFile(String fileName){
try {
URL resource = GraphUtil.class.getClassLoader().getResource(fileName);
return new File(resource.getPath());
} catch (Throwable e) {
throw new RuntimeException("Couldn't load resource: "+fileName, e);
}
}
其中fileName="file1.txt"
。
我收到错误,因为文件绝对路径如下所示:
file:/home/moha/.m2/repository/my/package/name/%7Bproject.version%7D/base-%7Bproject.version%7D.jar!/file1.txt
我究竟做错了什么?
答案 0 :(得分:2)
将文件内容作为流获取,以便能够从jar文件中读取资源,这是导致问题的根本原因。换句话说,使用getResourceAsStream
代替getResource
。
您也可以返回URL
而不是File
,然后再调用openStream()
,以便在需要时阅读。
NB1:
该网址的类型为jar:file/...
,无法由班级File
NB2:
要将URL
转换为File
,正确的代码为new File(resource.toURI())