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