我的问题:如何使用File
变量在课堂上注入Environment
?
我在properties
中指定了我需要阅读的文件的路径:
myFile.path=classpath:myFile.json
我曾经有一个XML应用程序上下文为property-placeholder
定义properties.file
,然后我可以使用@Value
注入我的文件:
@Value("${myFile.path}")
private File myFile;
然而,现在我想做点什么:
@Inject
private Environment environment;
private File myFile;
@PostConstruct
private void init() {
myFile = environment.getProperty("myFile.path", File.class);
}
但抛出异常:
Caused by: java.io.FileNotFoundException:
classpath:myFile.json (No such file or directory)
我也试过类似myFile = environment.getProperty("myFile.path", Resource.class).getFile();
的东西,但抛出了另一个异常。
如果知道属性中定义的路径可以是绝对路径还是类路径相对,我如何实现注入文件?
答案 0 :(得分:2)
您可以尝试注入ResourceLoader
,并使用它来加载引用的类路径资源:
@Autowired
private ResourceLoader resourceLoader;
...
@PostConstruct
private void init() {
String resourceReference = environment.getProperty("myFile.path");
Resource resource = resourceLoader.getResource(resourceReference);
if (resource != null) {
myFile = resource.getFile();
}
}