java - getResourceAsStream 不适用于每个类(class)?

标签 java jar

我有一个使用一些 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/

相关文章:

java - 审计和日志记录的区别?

java - 如何在Android Studio中使用OpenCV检测和计数随机大小的白色物体

java - 使用 Java 配置的 Spring 4 REST 应用程序(无 xml) IllegalArgumentException

java - 我们可以从 Java 中的 Future 对象中获取 Callable 对象吗?

java - 在 Java 中查找变量的原始数据类型

java - 从 Java 程序执行 .jar 文件

java - 如何在 monodroid 项目中使用 .jar?

java - 通过 .jar 部署 Jetty 服务器。为什么我无法访问索引?

java - 玩!作为 JAR 或服务部署的框架?

Java - 内存使用和多个 jar 实例