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

Чтение из src/main/resources дает NullPointerException

В моем проекте Maven у меня есть файл xls в src/main/resources. Когда я прочитал это так:

 InputStream in = new
 FileInputStream("src/main/resources/WBU_template.xls");

все в порядке.

Однако я хочу прочитать его как InputStream с getResourceAsStream. Когда я это делаю, с косой чертой или без нее, я всегда получаю NPE.

     private static final String TEMPLATEFILE = "/WBU_template.xls";
     InputStream in = this.getClass.getResourceAsStream(TEMPLATEFILE);

Независимо от того, есть ли косая черта или нет, или если я использую метод getClassLoader(), я все равно получаю NullPointer.

Я также пробовал это:

URL u = this.getClass().getResource(TEMPLATEFILE);
System.out.println(u.getPath());

консоль говорит... /target/classes/WBU _template.xls и затем получите мой NullPointer.

Что я делаю неправильно?

4b9b3361

Ответ 1

FileInputStream загрузит путь к файлу, который вы передадите конструктору, как относительный из рабочего каталога процесса Java.

getResourceAsStream() будет загружать путь к файлу относительно вашего пути к классу приложений.

Когда вы используете .getClass().getResource(fileName), он считает, что расположение файлаName является тем же самым расположением вызывающего класса.

Когда вы используете .getClass().getClassLoader().getResource(fileName) он считает, что расположение файлаName является корнем - другими словами, папка bin.

Файл должен находиться в src/main/resources при загрузке с использованием загрузчика классов

Короче говоря, вы должны использовать .getClass().getClassLoader().getResource(fileName) для загрузки файла в вашем случае.

Ответ 2

Обычно я загружаю файлы с WEB-INF, как это

session.getServletContext().getResourceAsStream("/WEB-INF/WBU_template.xls")