web-dev-qa-db-ja.com

ClassPathResourceがクラスパスを取得しない

私のアプリケーションでは、フォルダ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

なぜターゲットパスを指しているのですか?どうすれば変更できますか?

16
Blanca Hdez

私の推測では、絶対パスの問題は、Maven POMのターゲットのoutputDirectoryが原因です。私のプロジェクトでは、outputDirectory war/WEB-INF/classesと、ここからクラスが実行されます。ジャンク値に変更すると、クラスが実行されなくなります。

だから絶対パスはあなたの.classファイルの場所で何かをする必要があると思います。お役に立てれば 。

5
Aravind A

new ClassPathResource("classpath:testMediaExif")には2つの問題があります。

  1. _classpath:_接頭辞は構成ファイル(XMLファイルなど)でのみ使用され、ClasspathResourceを直接使用している場合は使用しないでください。
  2. _classpath:testMediaExif_は、参照しているファイルからの相対位置ではなく、クラスパスのルートにあるリソースを指します。

代わりにこれを試してください:

_new ClasspathResource("testMediaExif", getClass())
_

または

_new ClasspathResource("testMediaExif", MyClass.class)
_

これらは、testMediaExifに対してMyClassというリソースへの参照を構築します。

もう1つ:ClasspathResource.getFile()は、実際にはファイルであるリソースでのみ機能します。 JARにパックされている場合、機能しません。

17
skaffman