0

假设我有一个可执行 jar 文件的 MANIFEST.MF 的以下摘录:

Manifest-Version: 1.0
Main-Class: com.intersportleitner.skischule.gui.window.SkischulApplicationWindow
Class-Path: .
...

不应该有这样的目录结构:

Appdir
  |- bla.jar (self-executable)
  |- x.properties
  |- y.properties

因为如果我尝试使用以下代码片段加载属性,我会得到一个 IOException: Stream closed in properties.load(stream):

Properties properties = new Properties();
InputStream istream=SkischulApplicationWindow.class.getClassLoader().getResourceAsStream("y.properties");
BufferedInputStream stream = new BufferedInputStream(istream);
properties.load(stream);
stream.close();

该异常有点误导,因为实际上 istream 为空(指出当我尝试调用 istream 的方法以进行测试时......),所以找不到属性文件,我不知道为什么它会失败,因为根据到Executable jar 将找不到它应该以这种方式工作的属性文件......

4

1 回答 1

2

getResource并且getResourceAsStream依赖于类加载器实现和类路径。

我倾向于只在寻找嵌入式资源时使用这种方法,但这只是我

你“可以”尝试

InputStream istream=SkischulApplicationWindow.class.getClassLoader().getResourceAsStream("/y.properties");

反而

于 2012-08-16T09:36:24.490 回答