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

为什么?我是否在错误的位置放置?我是否错误地使用了类加载器 API?别的?myconfig.txt


答案 1

如果它在同一包中使用

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)的javadocClass#getResource(String)的javadoc中进行了解释。


答案 2

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

因此,请将以下内容添加到您的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>

玩得愉快。!!!


推荐