Подтвердить что ты не робот

КлассLoader getResourceAsStream возвращает значение null

Структура моего проекта (в Eclipse):

MyProject/
    src/        --> "source directory" on Eclipse 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 в неправильном месте? Я неправильно использую API ClassLoader? Что-то другое? Спасибо заранее!

4b9b3361

Ответ 1

Если в одном и том же пакете используйте

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 ClassLoader#getResource(String) и javadoc Class#getResource(String).

Ответ 2

Если вы работаете с 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>

Получайте удовольствие.!!!