Java ClassLoader getResourceAsStream返回null
我的项目目录结构(在Eclipse中): 在驱动程序中,我有以下代码:Java ClassLoader getResourceAsStream返回null,java,eclipse,classpath,classloader,inputstream,Java,Eclipse,Classpath,Classloader,Inputstream,我的项目目录结构(在Eclipse中): 在驱动程序中,我有以下代码: public class Driver { public static void main(String[] args) { InputStream is = ClassLoader.getSystemClassLoader.getResourceAsStream("myconfig.txt"); if(is == null) System.out.printl
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?还有别的吗?提前谢谢 如果它在同一个包中,请使用
InputStream is = Driver.class.getResourceAsStream("myconfig.txt");
你的方式
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("myconfig.txt");
它正在类路径的根目录中查找文件。你可以用
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("com/me/myapp/myconfig.txt");
和中解释了搜索规则。如果您正在使用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>
src/main/resources
真的
fileName.txt
src/main/resources
真的
fileName.wsdl
玩得开心 - 而不是- InputStream=ClassLoader.getSystemClassLoader.getResourceAsStream(“myconfig.txt”)
- 使用- InputStream is=ClassLoader.getSystemClassLoader.getResourceAsStream(“com/me/myapp/myconfig.txt”)
- 注意: 在打包之前不需要提供源文件夹名称(src)
<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>