ClassLoader getResourceAsStream返回null

时间:2013-09-26 18:02:27

标签: java eclipse classpath classloader inputstream

我的项目目录结构(在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?别的什么?提前谢谢!

3 个答案:

答案 0 :(得分:42)

如果它在同一个包装中使用

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

你拥有它的方式

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

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

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

javadoc of ClassLoader#getResource(String)javadoc of Class#getResource(String)解释了搜索规则。

答案 1 :(得分:9)

如果您正在使用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>

玩得开心。!!!

答案 2 :(得分:0)

  • 而不是-

    InputStream是= ClassLoader.getSystemClassLoader.getResourceAsStream(“ myconfig.txt”);

  • 使用-

    InputStream是= ClassLoader.getSystemClassLoader.getResourceAsStream(“ com / me / myapp / myconfig.txt”);

  • 注意: 无需在软件包之前提供源文件夹名称( src )。