0
我想加載一個名字在屬性文件中指定的類。這是相同的代碼。Java getResourceAsStream無法加載資源
try {
Properties properties = new Properties();
InputStream in = MyAbstractFactory.class.getResourceAsStream("/some.properties");
properties.load(in);
String impl = properties.getProperty("key");
MyAbstractFactory factories = (MyAbstractFactory) Class.forName(impl).newInstance();
return factories;
} catch (Exception e) {
return new DefaultFactoriesImpl();
}
此代碼是jar文件的一部分。屬性文件就在jar外面。它無法加載屬性文件,而是加載DefaultFactoriesImpl。我知道這發生在MyAbstractFactory.class.getResourceAsStream找不到類路徑中的資源時,但這似乎並不是這種情況。
導演結構: -
- COM
- myjar.jar
- some.properties
命令我正在執行的是 「Java的罐子myjar.jar」
任何有關爲什麼這可能會發生的反饋。這可能與Clasloaders有關嗎?我想補充一點,當我從eclipse中運行這個代碼時,它似乎拿起some.properties就好了。
感謝您的回答。刪除前導斜槓將附加當前包名,這似乎不是正確的做法。當我嘗試解壓縮jar文件並運行它時,我在其中一個類文件中實現了一些「java.lang.ClassFormatError:代碼段在類文件中的長度錯誤」。不知道這些是相關的問題! –
無論如何,我現在面對的似乎是一個不同的問題。所以是的,使用java -classpath運行它; myjar.jar com.fullyqualified.MainClass似乎正確地獲取屬性文件。 –