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

Posted

技术标签:

【中文标题】URL myURL=MyClass.class.getClassLoader().getResource(fileName);【英文标题】: 【发布时间】:2015-06-13 14:44:42 【问题描述】:

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

这是我的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);

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

【问题讨论】:

请加个标签说明这是什么语言,所以我们不需要依赖其他线索。 请您更详细地解释一下这个问题。编辑您的帖子标题并添加特定于语言或框架的标签也将是建设性的,因为它使其他用户没有什么可做的。 先发制人地猜测我们在这里谈论的是Java...... 【参考方案1】:

对您的代码进行了一些修改以使其正常工作。看来您不需要使用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

【讨论】:

感谢您的回复,但很遗憾无法使用。它通过指示这一行来抛出 NPE p.load(new InputStreamReader(myURL.openStream(), "UTF-8")); 改进了代码以更好地显示问题信息。 即使那样它也不起作用。我重塑了我的代码并发布在上面。现在我的代码运行良好。 衷心感谢 Mikk 给了我宝贵的时间【参考方案2】:

我将我的代码更改如下,并且它运行良好

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

    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;    
    //     

【讨论】:

以上是关于URL myURL=MyClass.class.getClassLoader().getResource(fileName);的主要内容,如果未能解决你的问题,请参考以下文章

无法获得标题信息的形式URL

.htaccess 重写友好的 URL

AngularJS 用 $location 改变 url

Facebook喜欢按钮没有链接到正确的URL

我无法获得完整的 url 路径 [重复]

页面加载后页面标题切换到 URL?