Чтение из 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.
Что я делаю неправильно?
Ответы
Ответ 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")