我有一个Spring Boot应用程序,该代码需要访问resources文件夹下的文件。这是我的application.properties文件:
cert.file=classpath:/resources/cert.p12
然而,它总是抱怨:
java.io.FileNotFoundException: classpath:/resources/cert.p12 (No such file or directory)
我仔细检查了文件夹 MY_PROJECT /目标/类 确保文件cert.p12退出。
并在代码中尝试访问该文件:
@Value("${cert.file}")
private String certFile;
....
@Bean
public Sender sender() {
return new Sender(certFile);
}
这个类路径究竟是什么?为什么它找不到文件?谢谢!
答案 0 :(得分:6)
Classpath包含内部您的资源目录。
尝试:
cert.file=classpath:cert.p12
我假设你有标准的maven目录结构。
答案 1 :(得分:2)
此语法不适用于普通的FileInputStream。请改用Spring Resourceloader。
@Autowired
private ResourceLoader resourceLoader;
@Value("${property.name}")
private String property;
File getPropertyFile(){
return resourceLoader.getResource(property).getFile();
}
application.properties
property.name=classpath:filename.txt
答案 2 :(得分:0)
您可以使用XXX.class.getResourceAsStream("filename")
获取资源。
如:
ObjectInputStream ois = new ObjectInputStream(MyClass.class.getResourceAsStream(PUBLIC_KEY_FILE));
Key key = (Key) ois.readObject();
ois.close();
而且,这在我的代码中起作用.MyClass是使用你的crt文件的类。我的PUBLIC_KEY_FILE
为"/rsa/PublicKey"
,只存储在src/main/resources/rsa
文件夹
答案 3 :(得分:0)
正如@BeeNoisy所说,您应该使用getResourceAsSreame(...)
而不是getResource(...).getFile()
。
我确切地看到了您的问题,并且我的代码正确地在计算机上运行,但是当我使用java -jar
命令加载带有嵌入式tomcat的应用程序时,我看到此错误:
所以我更改了这样的代码并解决了错误:
private final String licencePass;
private final String licenceName;
public ProcessFormController(@Value("${ramona.licence.keystore.fullname}") String licenceName,
@Value("${ramona.licence.pass}") String licencePass) throws Exception {
this.licenceName = licenceName;
this.licencePass = licencePass;
this.restTemplate = new RestTemplate(getHttpsRequestFactory());
}
private ClientHttpRequestFactory getHttpsRequestFactory() throws Exception {
logger.info("licenceName:" + licenceName);
final InputStream resourceAsStream =
getClass().getClassLoader().getResourceAsStream(
licenceName
);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(resourceAsStream, licencePass.toCharArray());
...
}
属性:
ramona.licence.keystore.fullname=key.p12
答案 4 :(得分:-1)
这条路对我有用 cert.file =。/建造/资源/主/ cert.p12