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用于DefaultResourceLoader实际加载资源。DefaultResourceLoader假设资源来自类路径,它不能处理 web 应用程序。要解决这个问题,您需要设置另一个ResourceLoader实现(如ServletContextResourceLoader)。但是,恕我直言,最好使用ApplicationContext加载资源(是的,它可以做到!)。只需@Autowire 它或实施ApplicationContextAware.

于 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 回答