Pfade für Ressourcen?

flashray

Erfahrenes Mitglied
Hallo,

wie ist es üblich Pfade für Ressourcen eines Programms zu anzugeben. Relative Pfade funktionieren nur solange ein Programm aus seinem ursprünglichen Pfad aufgerufen wird. Die Angabe von absoluten Pfaden bietet aber nur eine Teillösung, denn der User soll beim installieren der Anwendung einen beliebigen Ordner auswählen dürfen. Der nächste Schritt wäre den absoluten Pfad während dem Installieren zu generieren und in eine INI- oder Propertydatei im Programmordner abzulegen. Auf welchen das Programm zum laden der Resourcen zugreift. Schön und gut , das Problem ist aber, das Programm wird wenn es aus einem anderen Ort aufgerufen wird auch diese Datei mit dem Pfad nicht finden genauso wie es die anderen Ressourcen nicht findet. Also bleibt als letzte Möglichkeit den absoluten Pfad in die Registry zu schreiben und da der Ort dieser unabhängig vom Installationspfad ist, wird er problemlos zu finden sein.

Wie implementiert ihr die Pfade für die Programmressourcen? Welche alternativen gibt es zu dem oben beschriebenen Eintragen des Installationspfades in die Registry? Gibt es eine Möglichkeit in Java den absoluten Pfad einer Jar oder Classdatei herauszufinden? So wäre dann das Ablegen des Installationspfades in die Registry vermieden.

Vg Erdal
 
Hallo.

Puhhh. Schwierig aber ich glaube ich habs verstanden:

Du willst den Pfad deines Javaprogrammes (JAR) zur Laufzeit rausbekommen!?
Aber wozu?
Wenn ich ein Programm schreibe das zur Installation gedacht ist, installiere ich alles
was zum Prog gehört in einen Ordner, und dann kann ich doch mit relativen Pfaden alle
Ressourcen bekommen, die mit in dem Ordner stecken.

Oder habe ich diech falsch verstanden?
Wenn ja bitte nochmal einfacher erklären.

THX
 
Hallo!

Ich denke du verwechselst hier was... relative Pfade sind absoluten Pfaden vorzuziehen, wenn man die Gegebenheiten beim Benutzer nicht voraussehen kann... relative Pfade erlauben dir die Addressierung von Resourcen relativ zu einem von dir gewählten Ort (Beispielsweise das Installationsverzeichnis deiner Anwendung).

Ich würde alle Pfade zu irgendwelchen Systemressourcen relativ speichern. Als Speicherort bietet sich dann beispielsweise ein .properties File, eine in Memory-Datenbank (HSQLDB), das Preferences API (Zugriff auf Windows Registry) etc. an.

Btw. den Pfad eines Jars aus dem eine bestimte Klasse geladen wurde kann man so ermitteln:
Code:
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 *
 */
public class JarLocationExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(JarLocationExample.class.getProtectionDomain().getCodeSource().getLocation());
    }

}
Beispiel Ausgabe:
Code:
E:\eclipse\3.2M5\eclipse\configuration\org.eclipse.osgi\bundles\82\1\.cp>java -jar abc.jar
file:/E:/eclipse/3.2M5/eclipse/configuration/org.eclipse.osgi/bundles/82/1/.cp/abc.jar

Gruß Tom
 
Hallo,

@ RealHAZZARD

Das mit den relativen Pfaden funktioniert grundsätzlich ohne Probleme. Ich möchte aber meine Anwendung (Texteditor) mit einem Dateityp (.txt) in Windows verknüpfen. Öffne ich jetzt eine Datei mit meinem Programm, wird sie nicht im Programmordner aufgerufen sondern am Ort der aufgerufenen Datei. Dann stimmen aber die relativen Pfade nicht mehr.

@ Tom

Danke, habs mit deiner Hilfe nun endlich doch geschafft meine Anwendung einigermaßen in Win zu integrieren. Mit der folgenden Methode habe ich nun den Absoluten Pfad zu den Ressourcen:
Myclass.class.getProtectionDomain().getCodeSource().getLocation()
Einfach nur noch den Namen der Ressourcen an diesen Pfad dranhängen.

Hab auch vor kurzem entdeckt das das Package JDIC auch Methoden zur Dateitypassoziation bereit hält.
JDIC - Doc - Examples
Das Eintragen in die Registry müsste dan direkt ohne zuhilfenahme von Reg-Dateien klappen.

Vg Erdal
 
Zurück