在 maven 项目中,假设我们有一个名为“ config.cnf ”的文件,它的位置如下。
/src
/main
/resources
/conf
config.cnf
在 IDE (Eclipse) 中,我使用 ClassLoader.getResource(..) 方法访问此文件,但如果我使用 jar 运行此应用程序,我总是遇到“找不到文件”异常。最后,我编写了一个方法,通过查看应用程序的工作位置来访问文件。
public static File getResourceFile(String relativePath)
{
File file = null;
URL location = <Class>.class.getProtectionDomain().getCodeSource().getLocation();
String codeLoaction = location.toString();
try{
if (codeLocation.endsWith(".jar"){
//Call from jar
Path path = Paths.get(location.toURI()).resolve("../classes/" + relativePath).normalize();
file = path.toFile();
}else{
//Call from IDE
file = new File(<Class>.class.getClassLoader().getResource(relativePath).getPath());
}
}catch(URISyntaxException ex){
ex.printStackTrace();
}
return file;
}
如果您通过发送“ conf/config.conf ”参数调用此方法,您可以从 jar 和 IDE 访问此文件。