我正在开发一个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 for reading text file,它不起作用。
所以我想解决问题,任何想法?
答案 0 :(得分:1)
用户目录很棘手,除非您控制主程序(就像它适用于您一样)。
我建议您将配置文件与代码本身放在一起(也就是说在src / main / resources中。如果你把它直接放在那个目录中,你应该能够找到它
getClass().getResource("/ini.yaml");
或者,您可以将它放在资源下的并行包(您需要找到它的类)中,然后使用
getClass().getResource("ini.yaml");