在我的应用程序中,我想使用文件夹media/src/main/resources/testMediaExif
为了获得该路径,我使用了media/src/main/java/com/project/MyClass.java
中的这段代码:
ClassPathResource resource = new ClassPathResource("classpath:testMediaExif");
File file = resource.getFile();
String absolutePath = file.getAbsolutePath();
显示的错误是:
java.io.FileNotFoundException: class path resource [classpath:testMediaExif] cannot be resolved to URL because it does not exist
如果我更改了该代码:
ClassPathResource resource = new ClassPathResource("testMediaExif");
变量absolutePath取以下值:
/Users/blanca/desarrollo/media/target/test-classes/testMediaExif
为什么它指向目标路径?我怎么能改变它?
答案 0 :(得分:17)
new ClassPathResource("classpath:testMediaExif")
存在两个问题:
classpath:
前缀仅用于配置文件(例如XML文件),如果您直接使用ClasspathResource
,则不应使用此前缀。 classpath:testMediaExif
指的是类路径根目录中的资源,而不是相对于您在其中进行引用的文件。请改为尝试:
new ClasspathResource("testMediaExif", getClass())
或
new ClasspathResource("testMediaExif", MyClass.class)
这些将构建对testMediaExif
相对于MyClass
的资源的引用。
还有一件事: ClasspathResource.getFile()
只能在资源中使用,实际上是一个文件。如果它被包装在JAR中,那么它就无法工作。
答案 1 :(得分:5)
我的猜测是绝对路径问题是因为maven POM目标中的outputDirectory。在我的项目中,outputDirectory war / WEB-INF / classes,从这里开始执行类。如果我将其更改为某个垃圾值,则不再执行该类。
所以我相信绝对路径必须对.class文件的位置做些什么。希望这会有所帮助。