ClassLoader getResourceAsStream 返回 null

新手上路,请多包涵

我的项目目录结构(在 Eclipse 中):

 MyProject/
    src/        --> "source directory" on Eclipse's classpath/buildpath
        com.me.myapp
            Driver
            myconfig.txt

Driver 中,我有以下代码:

 public class Driver {
    public static void main(String[] args) {
        InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt");
        if(is == null)
            System.out.println("input stream is null");
        else
            System.out.println("input stream is NOT null :-)");
    }
}

当我运行它时,我得到以下控制台输出:

 input stream is null

为什么? 我是否将 myconfig.txt 放置在错误的位置?我是否错误地使用了 ClassLoader API?还有别的吗?

原文由 IAmYourFaja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 872
2 个回答

如果它在同一个包中使用

InputStream is = Driver.class.getResourceAsStream("myconfig.txt");

你拥有它的方式

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt");

它在类路径的根目录中寻找文件。你可以使用

InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt");

搜索规则在 ClassLoader#getResource(String)Class#getResource(String) 中进行了解释

原文由 Sotirios Delimanolis 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用的是 Maven,请在 BUILD 标记下添加以下行。当您在服务器上运行 webapp 但没有引用服务器上的资源时,您会收到此错误。

所以,将以下内容添加到您的 POM.xml 中,看看它的神奇之处。

 <resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.txt</include>
        </includes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>fileName.wsdl</include>
        </includes>
    </resource>
</resources>

玩得开心。!!!

原文由 Hitesh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题