类路径资源不获取类路径

2022-09-03 01:23:36

在我的应用程序中,我想使用文件夹中存在的资源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");

变量绝对路径采用以下值:

/Users/blanca/desarrollo/media/target/test-classes/testMediaExif

为什么它指向目标路径?我该如何更改它?


答案 1

有两个问题:new ClassPathResource("classpath:testMediaExif")

  1. 前缀仅用于配置文件(例如.XML文件),如果您直接使用,则不应使用。classpath:ClasspathResource
  2. classpath:testMediaExif引用类路径根目录中的资源,而不是相对于要在其中进行引用的文件。

请尝试以下操作:

new ClasspathResource("testMediaExif", getClass())

new ClasspathResource("testMediaExif", MyClass.class)

这些将构造对名为 相对于 的资源的引用。testMediaExifMyClass

还有一件事:只有在资源中才能工作,才是文件。如果它被打包在JAR中,那么它将不起作用。ClasspathResource.getFile()


答案 2

我的猜测是,绝对路径问题是由于maven POM的目标中的输出目录。在我的项目中,outputDirectory war/WEB-INF/classes 和它从这里执行类。如果我将其更改为某个垃圾值,则该类不再被执行。

因此,我相信绝对路径必须与.class文件的位置有关。希望这有帮助。


推荐