Я сделал функцию (Java), который должен прочитать bytes
из файла и распечатать их на консоль:Правильный путь для использования ClassLoader.getResource()?
public void loadPixels(int size){
ClassLoader cl = this.getClass().getClassLoader();
pixels = new byte[size];
try{
InputStream stream = cl.getResource("res/" + fileName).openStream();
stream.read(pixels);
System.out.println(pixels.toString());
stream.close();
}catch(Exception e){
e.printStackTrace();
}
}
Проблема заключается в том, что я получаю NullPointerException
на линии
InputStream stream = cl.getResource("res/" + fileName).openStream();
Для файла, который я пытаюсь открыть, имя «font.spt», которое также является значением, хранящимся fileName
. Этот файл находится в папке «res» в корневом каталоге проекта, и в настоящее время я использую Eclipse IDE.
Является ли мой подход к пути к файлу неправильным или что-то еще проблема?
Напомним: fileName
указывает на «font.spt», который находится под папкой «res» в каталоге bin.
EDIT: папка «res», содержащая файл .spt, теперь находится под «bin» для проекта, а не корневого каталога, но я все еще получаю ошибку. При запуске из среды IDE или экспортированного .jar я все еще получаю NullPointerException
, где я должен помещать эти файлы? Может ли кто-нибудь дать мне скриншот или пример?
Вы можете открыть файл .jar с помощью инструмента zipping и найти путь, где находится ваш файл, или у вас есть веб-проект? –
ClassLoader загружает ресурсы из пути к классам. Если файл находится в корне проекта, он не компилируется Eclipse в выходной каталог и, таким образом, не находится в пути к классам во время выполнения. Поместите файл в каталог источников, если вы хотите, чтобы он находился в пути к классам во время выполнения. –
с именем «res /» + filename, означает ли это, что я хочу создать папку под «src» с именем «res», а затем разместить там файлы? – user2649681