Java读取配置文件,如何以干净的方式获得正确的路径

时间:2014-09-09 03:46:07

标签: java eclipse configuration path cxf

我正在开发一个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,它不起作用。

所以我想解决问题,任何想法?

1 个答案:

答案 0 :(得分:1)

用户目录很棘手,除非您控制主程序(就像它适用于您一样)。

我建议您将配置文件与代码本身放在一起(也就是说在src / main / resources中。如果你把它直接放在那个目录中,你应该能够找到它

getClass().getResource("/ini.yaml");

或者,您可以将它放在资源下的并行包(您需要找到它的类)中,然后使用

getClass().getResource("ini.yaml");