[英]Java read config file, how to get the right path in a clean way
我正在使用Web服务,我想使用yaml作为我的配置文件。
但是问题是,当我运行main函数时就可以了,但是当我通过调用服务运行它时,文件路径变得不同并且找不到文件。
代码在这里:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import org.yaml.snakeyaml.Yaml;
public class ConfigInstance{
private static String projectRoot = System.getProperty("user.dir");
private final static String confRoot = "/conf";
private static CloudConfig cloudConfig = null;
public static CloudConfig getCloudConfig() throws FileNotFoundException{
if(null == cloudConfig){
Yaml yaml = new Yaml();
System.out.println(projectRoot+confRoot);
InputStream input = new FileInputStream(new File(projectRoot+confRoot + "/ini.yaml"));
cloudConfig = yaml.loadAs( input, CloudConfig.class );
}
return cloudConfig;
}
public static void main(String args[]){
try {
CloudConfig cc = ConfigInstance.getCloudConfig();
System.out.println(cc);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行主程序时,我得到:
/home/jiaohuan/workspace/SwitchCloud/conf
CloudConfig [cloudIp=10.108.119.165]
当我调用Web服务(使用cxf)时,得到:
/home/jiaohuan/Desktop/eclipse/conf
然后我得到了java.io.FileNotFoundException。
我的项目结构是:
项目|
---> Java资源|
-------> src |
----------->软件包|
------->测试|
---> conf |
------> ini.yaml |
而且我已经尝试过: Java-FilenotfoundException用于读取文本文件 ,它不起作用。
所以我想解决问题,有什么想法吗?
除非您可以控制主程序(例如,当它对您有用时),否则用户目录很棘手。
我建议您将配置文件与代码本身放在一起(也就是说,在src / main / resources中。如果直接将其放在该目录中,则应该可以使用
getClass().getResource("/ini.yaml");
或者,您可以将其放在资源下的并行包中(在需要查找的类中),然后使用
getClass().getResource("ini.yaml");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.