java - getResourceAsStream(file) 在哪里搜索文件?

标签 java class jvm

我被 getResourceAsStream() 弄糊涂了;

我的包结构如下:

\src
|__ net.floodlightcontroller // invoked getResourceAsStream() here
|__ ...
|__ resources
    |__ floodlightdefault.properties //target
    |__ ...

我想从 Floodlightdefault.properties 中读取。这是我的代码,位于 net.floodlightcontroller包裹:
package net.floodlightcontroller.core.module;
// ...
InputStream is = this.getClass().getClassLoader()
                 .getResourceAsStream("floodlightdefault.properties");

但它失败了,得到 is == null .所以我想知道 getResourceAsStream(file) 到底是怎么回事搜索 file .我的意思是它是否可以通过某些 PATH s 还是按一定的顺序?

如果是这样,如何配置 getResourceAsStream() 的地方寻找?

谢谢!

最佳答案

当您调用 this.getClass().getClassLoader().getResourceAsStream(File) , Java 在与 this 指示的类相同的目录中查找文件.因此,如果您的文件结构是:

\src
|__ net.floodlightcontroller.core.module
    |__ Foo.java
|__ ...
|__ resources
    |__ floodlightdefault.properties //target
    |__ ...

然后你会想打电话:
InputStream is = Foo.class.getClassLoader()
             .getResourceAsStream("..\..\..\resources\floodlightdefault.properties");

更好的是,将您的包结构更改为:
\src
|__ net.floodlightcontroller.core.module
    |__ Foo.java
    |__ floodlightdefault.properties //target
    |__ ...

只需调用:
InputStream is = Foo.class.getClassLoader()
             .getResourceAsStream("floodlightdefault.properties");

关于java - getResourceAsStream(file) 在哪里搜索文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19570608/

相关文章:

java - 我应该如何将值传递给页面?

java - 关于对象创建的基本事情 :is it a good practice to create a new object of listener, 每次我们想为一个 View 设置一个监听器

java - 结果未显示,日期验证

java - 向所有实现接口(interface)的类添加方法

objective-c - cocoa /Objective-C : Cross- Class Variables

java - 如何修复java.lang.UnsupportedClassVersionError:不支持的major.minor版本

java - 如何使 showData() 为不同的数据类型提供单独的结果?

使用类方法调用 Javascript 事件监听器

java - java中的静态 block 和对象 block 访问

java - 为什么将类定义为 final 会提高 JVM 性能?