我有一个具有以下结构的 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
我究竟做错了什么?
最佳答案
以流的形式获取文件的内容,以便能够从 jar 文件中读取资源,这是问题的根本原因。换句话说,使用 getResourceAsStream
而不是 getResource
。
您还可以返回 URL
而不是 File
,然后在需要时调用 openStream()
来读取它。
NB1:
URL 的类型为 jar:file/...
,不能由类 File
管理
NB2:
要将 URL
转换为 File
,正确的代码是 new File(resource.toURI())
关于java - 使用 mvn exec :java doesn't work 从另一个 Maven 模块加载资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37499742/