getResourceAsStream不适用于每个类吗?

迪克拉:

我有一个使用一些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,那么我得到的InputStream getResourceAsStream为null。

另外,如果我将A类保留为常规类(不继承),并将B类定义为:

Class B extends java.io.File
{
    public InputStream getInputStream(String path) throws Exception
    {
     return new A().getInputStream(path);
 }
}

返回的InputStream仍然为null。

问题是什么?有没有办法从继承的类访问文件File

谢谢,

乔恩·斯基特(Jon Skeet):

我怀疑这与包比继承有关。

如果您的类在一个包中,那么getResourceAsStream()它将相对于该包,除非您以“ /”(使其成为“绝对”资源)开头。一种替代方法是使用getClass().getClassLoader().getResourceAsStream()它不知道相对于包的路径。

只是子类化File根本不影响行为。如果您确实认为确实如此,请发布一个简短但完整的程序来演示该问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章