# mit getResourceAsStream () Datei im Classpath suchen



## fluxy (13. Dez 2004)

Guten Tag.

Also ich will in meinem aktuellen Programm eine Datei im Classpath suchen. Es handelt sich um eine XML-Datei, die der Konfiguration dient. Allerdings wenn ich getClass().getClassLoader().getResourceAsStream ("datei.xml") aufrufe, bekomme ich immer einen nullpointer zurück. Ich schätze, die Datei wird nicht gefunden.

Die Situation ist folgende:

ich habe eine Enviromentvariable, in der das Zielverzeichnis für die Konfigurationsdatei steht
Im Classpath steht der Wert der o.g. Enviromentvariable.

Kann mir jemand sagen, warum ich immer null zurückbekomme wenn ich nach der Datei suche?


----------



## Bleiglanz (14. Dez 2004)

wozu die Environmentvariable

so ist das nicht gedacht!


> getClass().getClassLoader().getResourceAsStream ("datei.xml")


liegt datei.xml in einem Wurzelordner im cp? bei diesem Vorgehen musst du die Packages respektieren

such mal im forum, war schon ein paarmal da


----------



## fluxy (14. Dez 2004)

Hmmm,


ich habe schonmal gesucht, allerdings finde ich die Methode immer im Zusammenhang mit jar-archiven. Wenn man ein jar-archiv hat, kann man damit eine Resource aus dem Archiv laden. Allerdings geht es bei mir um eine Datei die physikalisch irgendwo auf der Festplatte liegen kann. Irgendwo heisst, dass Java in jedem Verzeichnis suchen soll, was im Classpath angegeben wird. Für das Schreiben verwende ich folgendes Muster:

1.) Lese Classpath aus (InputStream in = getClass().getClassLoader().getResourceAsStream ("config.xml")    )
2.) Wenn in != null ist, dann ist die Datei vorhanden ansonsten schaue in einer Enviromentvariable 'SXCMS' nach. In dieser steh ein Verzeichnis (das Verzeichnis, in welches die xml datei geschrieben werden soll). Der Wert von SXCMS ist auch im Classpath vorhanden. Wenn SXCMS nicht existiert, schreibe ins aktuelle Verzeichnis.

Beim Auslesen ist nun in dem Verzeichnis, auf welches SXCMS zeigt, eine xml-datei mit dem angegebenen Namen vorhanden. Auf diese Datei will ich einen InputStream erzeugen!


Gruß Sebastian


----------



## Bleiglanz (14. Dez 2004)

Hä? Nimm doch java.io.File??

Liegt "config.xml" im gleichen Verzeichnis wie die Klasse (d.h. die class-Datei), in der die Zeile

```
(InputStream in = getClass().getClassLoader().getResourceAsStream ("config.xml") )
```
steht?


----------



## fluxy (14. Dez 2004)

nein tut sie nicht ich weiss halt nicht wo sie liegt genau das steht ja nur im Classpath.


----------



## Bleiglanz (14. Dez 2004)

design kaputt, was soll man dazu noch sagen; was denkst du eigentlich, was der "Classpath" ist?


----------



## fluxy (14. Dez 2004)

naja ich denke es ist eine Enviromentvariabele die CLASSPATH heisst....


----------



## fluxy (14. Dez 2004)

naja sagt mir doch einfach wie ich es besser machen kann. Die Datei steht nunmal da. Wie komme ich an sie denn nun dran?


----------



## Bleiglanz (14. Dez 2004)

> naja ich denke es ist eine Enviromentvariabele die CLASSPATH heisst....


das dachte ich mir fast 


> Wie komme ich an sie denn nun dran?


Über java.io.File?
Warum willst du mit dem Classloader arbeiten??


----------



## fluxy (14. Dez 2004)

Naja das Problem ist das ich nicht weiss wo die Datei liegt. Das ganze wird auf einem Webserver (Linux) oder Testweise auf der lokalen Arbeitsstatiion (Windows) ausgeführt, vondaher kann ich nicht direkt mit einem Fileobject arbeiten. Ich brauche eine Methode, die mir direkt einen InputStream liefert, ohne einen Pfad übergeben zu müssen.


----------



## akira (14. Dez 2004)

probiers mal so:


```
InputStream in = getClass().getClassLoader().getResourceAsStream ("/config.xml");
```


----------



## Bleiglanz (14. Dez 2004)

java.net.URL

oder lern einfach mal was der Classpath genau ist


----------



## fluxy (14. Dez 2004)

java.net.URL? was hat das denn nun damit zu tun. Mit / hatte ich auch schonmal ausprobiert, das hatte allerdings auch nicht geholfen. Gib mir doch mal eine Erklärung was der CLASSPATH genau ist.


----------



## Bleiglanz (14. Dez 2004)

eine geordnere Liste von Directories (zu denen auch .jar Dateien zählen), die von der JVM nacheinander benutzt werden um Klassen zu finden (i.e .class files ) und Ressourcen...


----------



## fluxy (14. Dez 2004)

aber so eine Resource könnte auch eine XML Datei sein? Also wenn ich das Verzeichnis im Classpath richtig eingetragen habe, und in dem eingetragenen Verzeichnis ist tatsächlich eine XML Datei mit dem Namen, so gibt die Methode getResourceAsStream mit einen InputStream auf diese XML-Datei zurück? Oder kann das gar nicht funktionieren?


----------



## Bleiglanz (14. Dez 2004)

es gibt aber keine Verzeichnisse

nur Wurzeln (die man normalerweise ignoriert), und darunter packages (als subordner)

getRessource("")

erwartet relativen Pfad ("neben der .class Datei") oder absolut von einer wurzel aus die package-hierarchie hinunter

bei mir funktioniert das immer ohne Probleme, weiss auch nicht was für eine seltsame Konstruktion du da machst


----------

