我有一个代码,需要检查是否存在类路径资源并执行一些操作。
File file = ResourceUtils.getFile("classpath:my-file.json");
if (file.exists()) {
// do one thing
} else {
// do something else
}
问题::如果资源不存在,ResourceUtils.getFile()
会抛出FileNotFoundException
。同时,我不想在代码流中使用异常,我想检查资源是否存在。
问题:是否可以使用Spring的API检查资源是否存在?
为什么需要使用Spring完成此操作:因为没有Spring,我需要自己选择一个正确的类加载器,这不方便。我需要使用其他代码才能使其在单元测试中起作用。
答案 0 :(得分:1)
您可以使用ResourceLoader Interface来加载getResource(),然后使用Resource.exists()来检查文件是否存在。
@Autowired
ResourceLoader resourceLoader;
Resource resource = resourceLoader.getResource("classpath:my-file.json");
if (resource.exists()) {
// do one thing
} else {
// do something else
}
答案 1 :(得分:0)
您可以使用Class.getResource方法
查找具有给定名称的资源。
它不会引发异常,但是如果找不到资源,则返回null
URL resource = clazz.getResource("my-file.json");
答案 2 :(得分:0)
它已经得到了回答并且很老,但想到有人看到docker和maven不能使用相同的解决方案,即使resource.exists()返回true。在这种情况下,我们可以做这样的事情(虽然有点 hacky):
Resource resource = resourceLoader.getResource("classpath:path/to/file");
if (resource.exists()) {
try {
// below throws file not found if the app runs in docker
resource.getFile()
} catch (FileNotFoundException e) {
// docker uses this
InputStream stream = new ClassPathResource("classpath:path/to/file").getInputStream();
}
}