2016-04-27 5 views
0

Я пытаюсь закодировать вспомогательный класс с методами, которые должны читать XML-файл внутри моей папки ресурсов и получать некоторые значения, по которым я буду работать в моем основном классе. Моя структура проекта выглядит следующим образом:Прочитайте ресурс из класса-помощника

Project 
| 
|---src 
| | 
| |---Main.class 
| | 
| |---Helper.class 
| 
|---resources 
    | 
    |---MYDOC.xml 

И код Helper.class я придумал до сих пор:

public class HelperClass { 


static Document document; 
static XPath xPath; 

общественный вспомогательный класс() {

try { 

     InputStream stream = HelperClass.class.getResourceAsStream("MYDOC.xml"); 

     DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = builderFactory.newDocumentBuilder(); 

     document = builder.parse(stream); 
     xPath = XPathFactory.newInstance().newXPath();  

     } 
     catch (FileNotFoundException e) { 
     e.printStackTrace(); 
     } catch (SAXException e) { 
     e.printStackTrace(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } catch (ParserConfigurationException e) { 
     e.printStackTrace(); 
     } 

    }; 

статическая строка getValue() {

String result = ""; 

String expression = "/SOMETHING/SOMETHING/VALUE"; 
try { 
    result = xPath.evaluate(expression, document); 
} catch (XPathExpressionException e) { 
    e.printStackTrace(); 
} 
return result; 

}}

Я создал папку ресурсов в качестве исходной папки, перепробовал много комбинаций пути к файлу (/MYDOC.xml, ресурсы/MYDOC.xml и т.д.), но я всегда получаю NullPointerException, когда я попробуйте использовать метод getValue() внутри Main.class.

Я был бы признателен, если бы кто-нибудь мог объяснить мне, что я делаю неправильно или лучший способ решить эту проблему, но я подозреваю, что в целом весь мой код плохой.

Подводя итог: Я хотел бы сделать HelperClass, который читает и получает значения из XML-файла, а затем использует эти методы внутри другого класса.

Благодарим вас за любую помощь/ответ/критику.

+0

Compile в .jar файл, и посмотреть в него с помощью zip-утилиты. Он должен содержать MYDOC.xml. Если ресурсы не должны быть исходной папкой в ​​среде IDE. Если в банке путь - это ресурсы/MYDOC.xml, используйте это как относительный или абсолютный путь «/resources/MYDOC.xml». И помните о чувствительной к регистру письме. –

+0

Перейдите в свою папку классов, сможете ли вы увидеть XML-файл вместе с вашими .class-файлами? –

+0

@JoopEggen Скомпилировал его, файл находится внутри. –

ответ

0

В вашем классе пути, если XML находится в папке ресурсов попробовать

HelperClass.class.getClassLoader().getResourceAsStream("resources/MYDOC.xml"); 

Если XML находится непосредственно под путь к классу попробуйте

HelperClass.class.getClassLoader().getResourceAsStream("MYDOC.xml"); 
+0

Пробовал оба варианта, с файлом внутри папки ресурсов и рядом с классом, я все еще получаю исключение NullPointerException, когда я использую метод getValue() внутри моего Main.class. –

+0

Что меня смущает, когда я помещаю весь код Helper.class внутри одного метода (с добавлением возвращаемого типа String) все работает нормально. Но когда я отделяю код, как описано выше, он генерирует исключение NullPointerException. –

+0

Является ли ваш класс Helperclass и Mian одним и тем же пакетом? вы можете попробовать это. Читайте .xml как ResourceAsStream в своем методе, где он работает. И затем передайте Stream в ваш метод hells calss, чтобы сделать остальную часть логики. Просто испытание. Не решение. –

Смежные вопросы