30

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

4

3 回答 3

43

如果它在同一个包中,请使用

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

你拥有它的方式

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

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

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

搜索规则在 的javadocClassLoader#getResource(String)和 的javadoc 中Class#getResource(String)有说明。

于 2013-09-26T18:02:58.857 回答
10

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

玩得开心。!!!

于 2015-04-01T22:25:41.390 回答
0
  • 而不是-

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

  • 使用-

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

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

于 2020-11-16T20:35:34.440 回答