2016-04-27 14 views
0

Ich versuche, eine Hilfsklasse mit Methoden zu schreiben, die eine XML-Datei in meinem Ressourcenordner lesen und einige Werte abrufen sollten, auf denen ich in meiner Hauptklasse arbeiten werde. Meine Projektstruktur sieht wie folgt aus:Lesen einer Ressource aus einer Hilfsklasse

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

Und der Code für die Helper.class ich mit so weit kam ist:

public class HelperClass { 


static Document document; 
static XPath xPath; 

öffentlichen helperClass() {

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(); 
     } 

    }; 

statischer String getValue() {

String result = ""; 

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

} }

Ich habe den Ressourcen-Ordner als Quellordner einzurichten, versucht, viele Kombinationen der Dateipfad (/MYDOC.xml, Ressourcen/mydoc.xml etc.), aber ich bekomme immer eine Nullpointer, wenn ich Versuchen Sie, die getValue() -Methode in der Main.class zu verwenden.

Ich wäre dankbar, wenn mir jemand erklären könnte, was ich falsch mache oder einen besseren Weg, um das zu lösen, aber ich vermute, dass im Grunde mein ganzer Code schlecht ist.

Zusammenfassend: Ich möchte eine HelperClass machen, liest und ruft Werte aus einer XML-Datei und dann diese Methoden in einer anderen Klasse.

Vielen Dank im Voraus für jede Hilfe/Antwort/Kritik.

+0

Compile auf eine .jar-Datei, und suchen mit einem Zip-Dienstprogramm hinein. Es sollte MYDOC.xml enthalten. Wenn nicht, müssen Ressourcen ein Quellordner in der IDE sein. Wenn im Pfad der Pfad Ressourcen/MYDOC.xml lautet, verwenden Sie diesen Pfad als relativen oder absoluten Pfad "/resources/MYDOC.xml". Und beachten Sie die Groß- und Kleinschreibung. –

+0

Gehen Sie zu Ihrem Klassenordner, können Sie die XML-Datei zusammen mit Ihren .class-Dateien sehen? –

+0

@JoopEggen Kompiliert, die Datei ist drin. –

Antwort

0

In Ihrem Klassenpfad, wenn die XML innerhalb des Ressourcenordner

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

versuchen, wenn die XML direkt unter dem Pfad dann Klasse versuchen

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

Beide Optionen versucht, mit der Datei innerhalb der Ressourcen-Ordner und neben der Klasse, ich bekomme immer noch eine NullPointerException, wenn ich die Methode getValue() in meiner Main.class verwenden. –

+0

Was mich verwirrt ist, wenn ich den gesamten Helper.class-Code innerhalb einer Methode (mit einem Rückgabetyp String hinzugefügt) alles gut funktioniert. Aber wenn ich den Code wie oben getrennt habe, löst er eine NullPointerException aus. –

+0

Ist Ihre Helperclass- und Mian-Klasse unter demselben Paket? kannst du das versuchen? Lesen Sie die .xml als ResourceAsStream in Ihrer Methode, wo sie funktioniert. Übergeben Sie dann den Stream an Ihre Hilfskalibrierungsmethode, um den Rest der Logik auszuführen. Nur ein Versuch. Keine Lösung. –