Spring: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
。
有谁知道问题是什么?!
答案 0 :(得分:1)
我遇到了同样的问题并发现了问题。问题在于,默认PathMatchingResourcePatternResolver
使用DefaultResourceLoader
来实际加载资源。 DefaultResourceLoader
假设资源来自类路径,并且它无法处理Web应用程序。要解决此问题,您需要设置另一个ResourceLoader
实现(例如ServletContextResourceLoader
)。但是,恕我直言,最好使用ApplicationContext
加载资源(是的,它可以做到!)。只需@Autowire它或实施ApplicationContextAware
。
答案 1 :(得分:-1)
如果这是一个maven项目。而不是将此文件放在/ WEB-INF / resource文件夹中,而是将其放入/ src / main / resources文件夹中。此文件夹中的资源将添加到类路径中。 所以你可以使用类似的东西:
Thread.currentThread().getContextClassLoader().getResourceAsStream("test.dat");
这样可行。