Где getResourceAsStream (файл) выполняет поиск файла?

Я запутался getResourceAsStream();

моя структура пакета выглядит так:

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

и я хочу прочитать из floodlightdefault.свойства. Вот мой код, лежащий в :

package net.floodlightcontroller.core.module;
// ...
InputStream is = this.getClass().getClassLoader()
                 .getResourceAsStream("floodlightdefault.properties");

но это не удалось, становится is == null. Поэтому мне интересно, как именно getResourceAsStream(file) искать file. Я имею в виду, работает ли он через определенные PATHS или в определенном ордер?

если да, то как настроить места, которые getResourceAsStream() ищет?

Thx!

1 ответов


когда вы называете 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");