Pfadangaben

E

Enrico

Gast
Guten Tag,

Da ich nicht genau Weiss wie ich mein Problem beschreiben soll geweige denn Wonach ich Suchen müsste, versuch ich meine Problemsituation hier mal zu erläutern.

Also ich habe ein kleines Projekt in eclispe. Die Projekt-Struktur sieht so aus:

http://enricovogt.de/projekt.JPG

Die XML-Datein lese ich in dem Programm ein um Einstellungsdaten zu erhalten. So nun kommt der Knackpunkt. Wenn ich das Projekt in eclispe starte funktioniert das einlesen.

Wenn ich allerdings eine .Jar generier und folgende Ordner Struktur habe:
-dir
--meine.jar
--cfg
---uploadCfg.xml
---ftpConnection.xml

dann funktioniert das einlesen nicht :(. Wie bekomm ich es hin das mein Jar, auf gleicher Ebene wie sie selbst einen ordner cfg sucht und daraus die xml´s nimmt...

hoffe ich habe mich verständlich genug ausgedrückt. Bitte um Hilfe, bin ganz neu in der Javawelt
 
Zuletzt bearbeitet von einem Moderator:
E

Enrico

Gast
Java:
	private final String uploadCfgPath = "cfg\\uploadConfig.xml";
	private final String ftpCfgPath = "cfg\\ftpConnection.xml";
         
        [...]

        input = new FileInputStream(uploadCfgPath);

Den Teil?
 

Gism0

Mitglied
Wenn ich allerdings eine .Jar generier und folgende Ordner Struktur habe:
-dir
--meine.jar
--cfg
---uploadCfg.xml
---ftpConnection.xml

du suchst aber nach


Java:
private final String uploadCfgPath = "cfg\\uploadConfig.xml";
private final String ftpCfgPath = "cfg\\ftpConnection.xml";
 
E

Enrico

Gast
Neee Die Dateinamen stimmten, habe ich nur nicht korrekt hingeschrieben.
projekt.JPG

a1.JPG

a2.JPG
 

Michael...

Top Contributor
Wie wird denn die Applikation gestartet? Die relativen Pfadangaben funktionieren nur, wenn die Applikation direkt aus dem Verzeichnis, in dem sich auch das Unterverzeichnis
Code:
cfg/...
müsste in Deinem Fall (dir) sein, gestartet wird.
 

Michael...

Top Contributor
Da wäre ich eigentlich davon ausgegangen, dass es funktioniert.

Woran machst Du fest, dass des Lesen nicht funktioniert?
Kannst irgendwo
Code:
new File(uploadCfgPath).exists()
einfügen und ausgeben lassen?
 
E

Enrico

Gast
Hi habe mir jetzt ne kleine GUI für mein Programm gebastelt und eine kleine Helfer-Funktion:

Java:
	public String debug()
	{
		String msg = "0";
		boolean uC = new File(uploadCfgPath).exists();
		boolean fC = new File(ftpCfgPath).exists();
		if(uC)
		{
			msg = "upload cfg da";
		}
		else
		{
			msg = "NIX";
		}
		if(fC)
		{
			msg += "ftp cfg da";
		}
		else
		{
			msg += "NIX";
		}
		return msg;
	}

Meine Ausgabe in eclispe sieht so aus:
me.JPG


Meine Ausgabe aus der gestarten .jar so:
oe.JPG
 

Michael...

Top Contributor
Ich habe bisher immer andere Erfahrungen gemacht.
Java:
	JFrame frame = new JFrame();
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	String msg = "not found";
	if (new File("test\\test.txt").exists())
		msg = "found";
	frame.add(new JLabel(msg, JLabel.CENTER));
	frame.setBounds(0, 0, 100, 100);
	frame.setVisible(true);
Wenn ich obigen Code mit entsprechendem Manifest in ein jar packe. Parallel zum jar ein Verzeichnist test mit einer Datei text.txt anlege und das jar per Doppelclick ausführe, kommt bei mir "found"
 
T

trääät

Gast
10 euro das beim build die daten mit INS jar reingepackt werden ... denn dann muss man ClassLoader.getResource() bzw ClassLoader.getResourceAsStream() nutzen ...
 
E

Enrico

Gast
habs mit ClassLoader.getResourceAsStream() leider nicht hinbekommen, habs jetzt so gelöst, auch wenn ich dies für sehr hässlich halte:
Java:
		String path = System.getProperty( "java.class.path" );
		path = path.replace("transferService.jar", "");
		
		uploadCfgPath = path+"/cfg/uploadConfig.xml"; 
		ftpCfgPath = path+"/cfg/ftpConnection.xml";

Kann mir jemand einen bessere Lösung anhand eines Beispiels zeigen?
 
E

Enrico

Gast
Ok, sry..

hiermit hatte ich versucht an den Pfad meiner .jar-Datei zu kommen:
Java:
configurationLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath();
[code=Java]

Dies gibt mir "./" zurück. Damit hatte ich versucht meine XML-Datein einzulesen also inetwa so:

"./cfg/uploadConfig.xml" ... dies funktioniert so aber nicht ... das gibt ne FileNotFound-Exception. Ich hab noch alle möglichen wilden kombinationen von Pfaden ausprobiert um irgentwie an die Datei zukommen. :( Hat alles irgentwie nicht klappen wollen.

Um jetzt trozdem an den Pfad zu kommen hab ich es so gelöst:
[code=Java]
        String path = System.getProperty( "java.class.path" );
        path = path.replace("transferService.jar", "");
        
        uploadCfgPath = path+"/cfg/uploadConfig.xml"; 
        ftpCfgPath = path+"/cfg/ftpConnection.xml";

path ohne Substring sieht so aus: C:\Users\Enrico\Desktop\transferService\transferService.jar
und danach halt so C:\Users\Enrico\Desktop\transferService\cfg\uploadConnection.xml

Mit dieser Lösung kann ich die Datei einlesen. Wie schaffe ich es die Datei erfolgreich einzulesen nur mit configurationLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath();

Hoffe jetzt hab ich mich verständlich ausgedrückt.
 
M

maki

Gast
Probier es mal mit
Java:
configurationLoader.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()
Damit solltest du IMHO den absoluten Pfad bekommen zur Jar, von dort aus kannst du dich dann"weiterhangeln" im Dateisystem.

Achte darauf dass dieser Code aus der IDE aufgerufen in den bin Ordner zeigen wird, gibt ja noch kein Jar.
 
E

Enrico

Gast
Vielen dank dafür, allerdings ist klappt das irgendwie nicht.

In der IDE:
/C:/Users/Enrico/workspace/meinProjekt/bin/

Als exportiere jar:
null
 

Ähnliche Java Themen

Neue Themen


Oben