繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM