无法加载保存在代码之外的属性文件

时间:2011-10-31 18:57:12

标签: java

import static com.crawler.constants.CrawlerConstants;
import static com.crawler.constants.CrawlerConstants.CRAWLER4J;


import java.util.Properties;


public final class Configurations {

    private static Properties prop = new Properties();


    public static String getStringProperty(String key, String defaultValue) {
        if (prop == null || prop.getProperty(key) == null) {
            return defaultValue;
        }
        return prop.getProperty(key);
    }

    public static int getIntProperty(String key, int defaultValue) {
        if (prop == null || prop.getProperty(key) == null) {
            return defaultValue;
        }
        return Integer.parseInt(prop.getProperty(key));
    }

    public static short getShortProperty(String key, short defaultValue) {
        if (prop == null || prop.getProperty(key) == null) {
            return defaultValue;
        }
        return Short.parseShort(prop.getProperty(key));
    }

    public static long getLongProperty(String key, long defaultValue) {
        if (prop == null || prop.getProperty(key) == null) {
            return defaultValue;
        }
        return Long.parseLong(prop.getProperty(key));
    }

    public static boolean getBooleanProperty(String key, boolean defaultValue) {
        if (prop == null || prop.getProperty(key) == null) {
            return defaultValue;
        }
        return prop.getProperty(key).toLowerCase().trim().equals("true");
    }

    static {
        try {
            prop.load(Configurations.class.getClassLoader()
                    .getResourceAsStream(CONFIG_DIR + "/" + CRAWLER4J));
        } catch (Exception e) {
            prop = null;
            System.err.println("WARNING: Could not find crawler4j.properties file in class path. I will use the default values.");
        }
    }
}

在我上面的try循环中,它没有加载crawler4j.properties文件。像以前一样 -

try {
                prop.load(Configurations.class.getClassLoader()
                        .getResourceAsStream("crawler4j.properties"));
            }

所以它可以直接从src / main / resources文件夹加载它。但我想将这个crawler4j.properties文件加载到不同目录下的代码之外。所以我在/my/dir/crawler4j.properties中存储了crawler4j.properties文件,这是我要修改的try循环 -

try {
                prop.load(Configurations.class.getClassLoader()
                        .getResourceAsStream(CONFIG_DIR + "/" + CRAWLER4J_PROP));
            }

CONFIG_DIR包含\ my \ _dir和CRAWLER4J有crawler4j.properties但不知何故它没有加载,它将捕获异常块。任何建议为什么会发生。

4 个答案:

答案 0 :(得分:1)

如果您尝试将某些东西作为资源加载,它必须位于类路径上 - 这是资源的定义(给予或接受)。

要从文件系统路径加载它,请使用load(InputStream)(或load(Reader))。

答案 1 :(得分:0)

那么,你得到什么样的例外?文件未找到?这是Web应用程序或常规Java应用程序的一部分吗?

确保您具有读取目录中属性文件的读取权限。

编辑: getResourceAsStream如果找不到资源则返回null,如其他人所建议的那样: 1.确保属性文件位于类路径中。 2.逃离/ -

        prop.load(Configurations.class.getClassLoader()
                .getResourceAsStream(CONFIG_DIR + "//" + CRAWLER4J_PROP));

答案 2 :(得分:0)

这很可能是一个配置错误的路径,在你的catch中尝试附加在你的System.err语句中:

e.getMessage();

答案 3 :(得分:0)

我想你可能会发现你需要逃避“/”所以尝试使用“//”。我不确定这是不是问题,但是我已经有一段时间回来了,并试图弄清楚为什么它适用于某些地方而不是其他地方。