URL myURL = MyClass.class.getClassLoader()。getResource(fileName);

时间:2015-04-08 14:50:27

标签: java utf-8 properties-file

如果属性文件在类路径中,但是当我将属性文件放在相关的包中,那么以下代码可以正常工作,那么它根本就不会读取它。

这是我的java代码:

private String readPropVal(String propertyValue, String fileName)throws Exception{

    String path="";

    URL myURL = CategoriesMethods.class.getClassLoader().getResource(fileName);
    InputStream in = myURL.openStream();
    ClassLoader classLoader = getClass().getClassLoader();
    Properties p = new Properties();

    p.load(new InputStreamReader(classLoader.getResourceAsStream(fileName), "UTF-8"));
    path = p.getProperty(propertyValue);

    return path;    
}//

我想以下行用于从类路径中读取属性文件:

URL myURL = CategoriesMethods.class.getClassLoader().getResource(fileName);

如何使用类路径以外的路径?

2 个答案:

答案 0 :(得分:0)

对您的代码进行一些修改以使其正常工作。看来你不需要使用classLoader,而是使用类本身。

此外,我的代码现在有一个参数 clazz ,这是该文件相对后看的类 - 这样代码更通用,我认为这是件好事。

private String readPropVal(String property, String fileName, Class<?> clazz) {

    String value = "";

    URL myURL = clazz.getResource(fileName);
    if (myURL == null) {
        fileName = clazz.getResource(".").toString() + fileName;
        throw new IllegalArgumentException(fileName + " does not exist.");
    }
    Properties p = new Properties();

    try {
        p.load(new InputStreamReader(myURL.openStream(), "UTF-8"));
    } catch (Exception e) {
        throw new IllegalStateException("problem reading file", e);
    }
    value = p.getProperty(property);

    if (value == null) {
        throw new IllegalArgumentException("Key \"" + property + "\" not found in " + myURL.toString());
    }

    return value;    
}

现在可以像这样调用此方法:

readPropVal("propertyName", "fileName.properties", AnyClassNextToTheFile.class)

fileName.properties 文件应包含

之类的行
propertyName = someValue

答案 1 :(得分:0)

我改变了我的代码,如下所示,它完美地运作

private String readPropVal(String propertyValue,String fileName)抛出异常{

    String path="";                             
        File propFile = new File(fileName);
    Properties properties = new Properties();
    properties.load(new InputStreamReader(new FileInputStream(propFile),"UTF-8"));
        path = properties.getProperty(propertyValue);          
        return path;    
    }//