# Pfad aus Ressource-Datei auslesen



## D33d (15. Mrz 2010)

Hallo,

ich habe eine Frage an euch
ich habe jetzt schon ettliche Möglichkeiten getestet aber keine hat funktioniert.
Und zwar habe ich die String Variable "action" die war bisher immer statisch, ganz unten definiert mit einem festen Pfad.
Da sich der Pfad aber ab und an ändern kann, sollte ich nun eine configdatei erstellen (die heißt in diesem fall "userauth.config") die sich im .jar in den Ressourcen befindet ("UserMgr.jar\resources\userauth.config") in dieser steht in der ersten Zeile der Pfad zu einem ganz anderen Ort, wohin dürfte hierfür belanglos sein.
Jedenfalls will ich diesen Pfad auslesen und auf "action" speichern, damit ich ihn im weiteren Programmverlauf benutzen kann.

So ich habe jetzt unten im Program rausgenommen das statisch ein String zugewiesen wird und dafür oben im Konstruktor folgendes eingefügt:

```
try{
```

dann kommt das:

```
URL userauthpathrurl = ClassLoader.getSystemResource("./resources/userauth.config");
            BufferedReader pathreader = new BufferedReader(new InputStreamReader(userauthpathrurl.openStream()));
```

bzw hiermit hab ichs auch versucht:

```
BufferedReader pathreader = new BufferedReader(new InputStreamReader(getClass().getClassLoader().getResourceAsStream("./resources/userauth.config")));
```

und dann das hier:

```
String userauthpath = pathreader.readLine();
            if (userauthpath != null){
                jLabelUserLoggedon.setText(userauthpath);
                action = userauthpath;}
            else{
                jLabelUserLoggedon.setText("CGI not found!");
            }
            pathreader.close();
        }
        catch(IOException ioe)
        {ioe.printStackTrace();}
```


Im Debugger funktioniert alles einwandfrei nur wenn ich das dann auf dem PC ausführe auf dem es laufen soll kommt folgendes:



> java -jar UserMgr.jar
> Java Accessibility Bridge for GNOME loaded.
> 
> Mar 15, 2010 5:50:39 PM org.jdesktop.application.Application$1 run
> ...



Zum System, ich benutze Netbeans und wie gesagt, da funktioniert es 1A, auch wenn ichs im Debuggmodus Schritt für Schritt durchgehe, aber auf dem PC auf dem es letztendlich laufen soll (Solaris PC) kommt eben das.

Ich hoffe ihr könnt mir helfen, wenn ihr noch Details braucht, nur raus damit!


----------



## lumo (16. Mrz 2010)

Hier der Code zu deinem Problem

```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(Test.class
				.getResourceAsStream("resources/userauth.config")));
		String cfg = "failed";
		try {
			cfg = br.readLine();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(cfg);
	}
}
```

und unten hab ich noch die .jar angehängt, damit du siehst, dass es auch funktioniert...
bei auftretenden fragen... einfach posten


----------



## D33d (16. Mrz 2010)

Hi,

danke für die schnelle antwort.
ich hab dein Tool getestet und es funktioniert einwandfrei.
Jetzt habe ich die Zeile mit bufferedreader bei mir eingefügt und hab wieder ein Problem:


```
BufferedReader pathreader = new BufferedReader(new InputStreamReader([COLOR="Red"]usermgr.UserMgrView[/COLOR].class
                            .getResourceAsStream("resources/userauth.config")));
```

Ich hab mit Netbeans das Program als eine Desktopapplication erstellt. Und Netbeans legt dafür dann gleich mehrere Klassen an:

-UserMgrApp: die am anfang alles aufruft und
-UserMgrView: hier hab ich mit swing die grafische Oberfläche und eben mein ganzen Funktionien, eben was passiert wenn man diesen oder jenen Button drückt.

So...in der UserMgrView steht nun dieser Codeausschnitt im Konstruktor, deswegen hab ich zuerst als Klassenname "UserMgrView" angegeben...funktioniert nicht


> Application class usermgr.UserMgrApp failed to launch
> java.lang.NullPointerException ...


dann "usermgr.UserMgrView"...funktioniert nicht, selbe Meldung.
"this." oder irgendwelche andren Versuche, werden mir sowieso sofort rot unterlegt und ich hab keine Ahnung was ich hier jetzt noch machen soll!


----------



## lumo (16. Mrz 2010)

schon mit 
	
	
	
	





```
getClass().getResourceAsStream("resources/userauth.config")
```
 versucht?

das problem an der sache ist, dass er dann den pfad sucht, aus dem verzeichnis, wo die class file liegt...

bei mir lag das Test.class file im default path... was netbeans so treibt kann ich dir nicht sagen,
habe netbeans vor langer zeit den rücken gekehrt und bin nun eclipse fan


----------



## D33d (16. Mrz 2010)

Hm damit funktioniert es auch nicht es kommt immer folgende Fehlermeldung



> SCHWERWIEGEND: Application class usermgr.UserMgrApp failed to launch
> java.lang.NullPointerException
> at java.io.Reader.<init>(Reader.java:61)
> at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
> ...



Sollte ich mal wieder ein Javaprojekt haben werd ichs auch mal mit Eclipse versuchen.


----------



## lumo (16. Mrz 2010)

usermgr <- dein package?
UserMgrApp <- deine HAUPT applikation?

wenn das so ist dann versuchs mit UserMgrApp.class.get....usw

achja... deine verzeichnisstruktur muss dann so aussehen

[verz.usermgr] mit den files UserMgrApp.class und dem unterordner [resource] in dem deine config liegt...

lass dir mal ausgeben in welchem folder der sucht, und schau wo die config wirklich liegt...


----------



## D33d (16. Mrz 2010)

Ha ich habs gefunden!
Also zum einen hab ich jetzt UserMgrApp.class.getR... da stehen und ausserdem hatte ich nen fehler in der Verzeichnisstrucktur. Es gibt zwei resources verzeichnisse, eins direkt im Package und eines im Unterverzeichnis usermgr, das sieht ungefähr so aus:


```
UserMgr.jar
    META-INF
    resources
    usermgr
        resources
```

ich hatte die configdatei im falschen resource-verzeichnis, nämlich im oberen, jetzt im Unteren funktioniert es.

Dankeschön für die Hilfe! Das bringt mich ein ganzes Stück weiter!


----------



## lumo (16. Mrz 2010)

null problemo 
dann viel erfolg beim proggen


----------

