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但不知何故它没有加载,它将捕获异常块。任何建议为什么会发生。
答案 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)
我想你可能会发现你需要逃避“/”所以尝试使用“//”。我不确定这是不是问题,但是我已经有一段时间回来了,并试图弄清楚为什么它适用于某些地方而不是其他地方。