1

春: 3.2.0.RELEASE

私が読むつもりだったファイルは に置かれてい/WEB-INF/resources/test.datます。

以下のようにコードします。

 @javax.annotation.Resource(name = "pathMatchingResourcePatternResolver")
 private PathMatchingResourcePatternResolver resolver;
 ...
 ...
 Resource resource2 = resolver.getResource("/WEB-INF/resources/test.dat");
    try {
        File file = resource2.getFile();
    } catch (IOException e) {
        e.printStackTrace();
    }

PathMatchingResourcePatternResolver のドキュメントから、次のように説明されています。and simple unprefixed paths such as "/WEB-INF/context.xml".

しかし、実際には次のエラーが発生しますjava.io.FileNotFoundException: class path resource [resources/test.dat] cannot be resolved to URL because it does not exist

誰が問題が何であるか知っていますか?!

4

2 に答える 2

1

私は同じ問題に直面し、問題を見つけました。問題は、実際にリソースをロードするためにデフォルトでPathMatchingResourcePatternResolver使用されることです。は、リソースがクラスパスから来ると想定しており、Web アプリを処理できません。これを修正するには、別の実装 ( など)を設定する必要があります。しかし、IMHO、リソースをロードするために使用する方が良いです (ええ、それはできます!)。@Autowire するか、実装するだけです。DefaultResourceLoaderDefaultResourceLoaderResourceLoaderServletContextResourceLoaderApplicationContextApplicationContextAware

于 2014-08-02T21:56:33.017 に答える
-1

Mavenプロジェクトの場合。このファイルを/WEB-INF/ resourceフォルダーに置く代わりに、/ src / main/resourcesフォルダーに置きます。このフォルダ内のリソースはクラスパスに追加されます。したがって、次のようなものを使用できます:

Thread.currentThread().getContextClassLoader().getResourceAsStream("test.dat");

これは機能します。

于 2013-03-04T09:40:24.873 に答える