我有一个使用一些 txt 文件的 jar 文件。为了获取它们,它使用 Class.getResourceAsStream
函数。
Class A
{
public InputStream getInputStream(String path) throws Exception {
try {
return new FileInputStream(path);
} catch (FileNotFoundException ex) {
InputStream inputStream = getClass().getResourceAsStream(path);
if (inputStream == null)
throw new Exception("Failed to get input stream for file " + path);
return inputStream;
}
}
}
此代码运行良好。
问题是,如果我将类 A 定义为 extends java.io.File
,我从 getResourceAsStream
获得的 InputStream 为空。
此外,如果我将 A 类保留为常规类(未继承),并将 B 类定义为:
Class B extends java.io.File
{
public InputStream getInputStream(String path) throws Exception
{
return new A().getInputStream(path);
}
}
返回的 InputStream 仍然为 null。
问题是什么?有没有办法从继承 File
的类访问文件?
谢谢,
最佳答案
我怀疑这与包有关,而不是继承。
如果您的类在包中,则 getResourceAsStream()
将相对于该包,除非您以“/”开头(这使其成为“绝对”资源)。另一种方法是使用 getClass().getClassLoader().getResourceAsStream()
,它不知道路径是相对于包的。
只是子类化 File
根本不会影响行为。如果您真的相信它确实存在,请发布一个简短但完整的程序来演示该问题。
关于java - getResourceAsStream 不适用于每个类(class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/873960/