首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResourceBundle抛出MissingResourceException

ResourceBundle抛出MissingResourceException
EN

Stack Overflow用户
提问于 2016-03-15 10:32:53
回答 2查看 2.5K关注 0票数 0

我正在尝试从文件位置读取属性文件。但是,资源包无法找到文件并引发下面的异常

我试图将该文件保存在类路径下,但没有成功地读取该文件。但是,我的意图是从文件路径读取属性文件,这是来自用户的。因此,我的类可以读取与不可知论的文件输入来获得属性。

代码语言:javascript
复制
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name configFileName, locale en_US
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:721)
    at com.cisco.propertiesreader.FileConfigLoader.getBundle(FileConfigLoader.java:16)
    at com.cisco.propertiesreader.MainApp.main(MainApp.java:10)

FileConfigLoader类:

代码语言:javascript
复制
package com.cesna.propertiesreader;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.apache.log4j.Logger;

public class FileConfigLoader {

    private static final Logger LOGGER = Logger.getLogger(FileConfigLoader.class);

    private static String EMPTY = "";

    public static ResourceBundle getBundle(String configLocation) {

        ResourceBundle rb = ResourceBundle.getBundle("configFileName");

        return rb;

    }

    public static String getValue(ResourceBundle rb, String key) {
        String value = EMPTY;

        try {
            value = rb.getString(key);
        } catch (MissingResourceException mREx) {
            LOGGER.error("Missing Resource : " + key);
        }

        return value;
    }

}

MainApp类:

代码语言:javascript
复制
package com.cesna.propertiesreader;

import java.util.ResourceBundle;

public class MainApp {

    public static void main(String[] args) {

        ResourceBundle resource = FileConfigLoader
                .getBundle("D:\\PDIWorkspace\\PropertyFileReader\\resoures\\config.properties");

        String hive_db = FileConfigLoader.getValue(resource,"hive_db");

        System.out.println(hive_db);
    }

}

我这样做是对的。

config.properties

代码语言:javascript
复制
hive_db=installbase
EDGE_HIVE_CONN=dev-node
target_dir=/app/dev/SmartAnalytics/sqoop_temp/
IB_log_table=IB_log
SR_DG_master_table=data_usage_governance_master
SR_DG_table=data_usage_governance_log

使用以下读取文件的方式解决了问题:

代码语言:javascript
复制
package com.cesna.propertiesreader;

import java.util.ResourceBundle;

public class MainApp {

    public static void main(String[] args) {

        ResourceBundle resource = FileConfigLoader
                .getBundle("com.cisco.propertiesreader.config");

        String hive_db = FileConfigLoader.getValue(resource,"hive_db");

        System.out.println(hive_db);
    }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-15 10:37:31

您确定以下内容是有意的

代码语言:javascript
复制
public static ResourceBundle getBundle(String configLocation) {

    ResourceBundle rb = ResourceBundle.getBundle("configFileName");

    return rb;

}

我觉得应该是

代码语言:javascript
复制
public static ResourceBundle getBundle(String configLocation) {

    ResourceBundle rb = ResourceBundle.getBundle(configLocation);

    return rb;

}

如果您想从外部目录加载数据(不是在类路径中)

代码语言:javascript
复制
public static ResourceBundle getBundle(String basePath, String baseName) throws MalformedURLException {
    File file = new File(basePath);
    URL[] urls = {file.toURI().toURL()};
    ClassLoader loader = new URLClassLoader(urls);
    ResourceBundle rb = ResourceBundle.getBundle(baseName, Locale.getDefault(), loader);
    return rb;
}   
票数 1
EN

Stack Overflow用户

发布于 2016-07-21 09:58:18

代码语言:javascript
复制
public static ResourceBundle getBundle(String configLocation) {
   ResourceBundle rb = ResourceBundle.getBundle("./resources/"+configLocation);
   return rb;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36008729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档