Name der ausführenden jar-Datei abfragen

Status
Nicht offen für weitere Antworten.

Sasa

Mitglied
Hallo,

wenn ich mein Programm in eine ausführbare jar-Datei packe, würde ich zur Laufzeit gerne wissen, wie der Name dieser Datei ist. Ich möchte den Wert nicht in den Code schreiben, schließlich kann der Benutzer den Namen ja geändert haben.

Mit welchem Java-Befehl geht das?
 

Sasa

Mitglied
Hab' den Befehl gefunden:
Code:
System.getProperty("java.class.path");
 
R

Roar

Gast
Sasa hat gesagt.:
Hab' den Befehl gefunden:
Code:
System.getProperty("java.class.path");
nä nich wirklich... das liefert dir den ganzen classpath, und kann ne ganze menge sein...
nen befehl der dir das zurückgibt gibts nicht, was willst du damit machen?
 

Sasa

Mitglied
Okay, hast recht. Die Methode gibt den ganzen Classpath zurück, allerdings besteht der bei meinem Programm zum Glück nur aus dem Dateinamen der jar-Datei. Deshalb funktioniert das, was ich vorhatte bis jetzt ganz gut.
Code:
String executingPath = System.getProperty("java.class.path");
if (executingPath.endsWith(".jar")) {
  try {
    JarFile jarFile = new JarFile(executingPath);
    Enumeration enumeration = jarFile.entries();
    while (enumeration.hasMoreElements()) {
      JarEntry entry = (JarEntry) enumeration.nextElement();
      String entryName = entry.getName();
      if (entryName.endsWith(".properties")) {
        System.out.println(entryName);
      }
    }
  } catch (IOException e) {
    System.err.println(e);
    e.printStackTrace();
  }
}
Damit lese ich aus, welche properties-Dateien verfügbar sind. Wenn der Benutzer noch was anderes als Classpath angibt, habe ich ein Problem?! :bahnhof:
 

Bleiglanz

Gesperrter Benutzer
prinzipiell verständlich, aber:

wenn du das ganze eh als jar verteilst, dann weisst du doch beim Erstellen des jars schon welche properties-Dateien da drin sind?
Dann könnte man ja gleich mit ant eine "Meta"-Property Datei basteln die alle diese Namen enthält?

ausserdem nicht besonders robust: du gehst davon aus, dass dein jar immer als letztes im Classpath steht...
 

Sasa

Mitglied
Um mal zu testen, was System.getProperty("java.class.path") so alles zurückgeben kann, habe ich versucht den Wert für Classpath zu ändern, aber im Programm blieb er immer gleich. Daher die (dumme :oops:) Frage: Wie ändere ich den Classpath? (Mit "-classpath <path>" passiert irgendwie nichts)

@Bleiglanz: An eine Meta Properties-Datei habe ich auch schon gedacht, doch wieso ant?

Ich gehe davon aus, dass die Benutzer meines Programms intelligent, gemein und faul sind. Das heißt ich traue ihnen zu, dass sie die jar-Datei ändern, also properties-Dateien löschen oder hinzufügen aber nicht die Meta-Datei ändern (wollen), sondern vom Programm erwarten, dass es die Änderung erkennt.
 
R

Roar

Gast
Sasa hat gesagt.:
@Bleiglanz: An eine Meta Properties-Datei habe ich auch schon gedacht, doch wieso ant?
öhm, damit du das nich bei jedem jar build von hand machen musst?

Ich gehe davon aus, dass die Benutzer meines Programms intelligent, gemein und faul sind. Das heißt ich traue ihnen zu, dass sie die jar-Datei ändern, also properties-Dateien löschen oder hinzufügen aber nicht die Meta-Datei ändern (wollen), sondern vom Programm erwarten, dass es die Änderung erkennt.
pf, wenn der benutzer an programmdateien rumfummelt braucht er sicht nicht zu wundern wenn das programm nich mehr richtig funktioniert.
 

Bleiglanz

Gesperrter Benutzer
Ich gehe davon aus, dass die Benutzer meines Programms intelligent, gemein und faul sind
dann musst du es wohl oder übel dynamisch erkennen...

in dem Fall ist es aber doch blöd, wenn du die überhaupt ins jar packst, lass sie einfach im Dateisystem liegen (im gleichen Ordner wie die jar)??
 

0xdeadbeef

Top Contributor
Die Kernfrage bleibt, warum der Name der Jar-Datei bekannt sein muß. Um Ressourcen aus dem Jar zu laden, muß dessen Name nicht bekannt sein, sondern lediglich der Name der Ressource.
Ist es tatsächlich so, daß Dein Programm nicht weiß, welche Properties-Dateien es laden könnte/müßte?

Abgesehen davon gibt es außer dem Classpath noch eine zweite/bessere Methode um an den Namen des Jars zu kommen und zwar über den ClassLoader.

Ich hatte hier mal was dazu gepostet, wenn auch in einem anderen Kontext:
http://www.java-forum.org/de/viewtopic.php?p=127962&highlight=#127962


Code:
       String iniFileStr ;
       String s = this.getClass().getName().replace('.','/') + ".class";
       URL url = this.getClass().getClassLoader().getResource(s);
       int pos;
       try {
           iniFileStr = URLDecoder.decode(url.getPath(),"UTF-8");
       } catch (UnsupportedEncodingException ex) {};

Im String iniFileStr befindet sich jetzt der gesamte Pfad+Filename der aufrufenden Klasse.
Falls die Klasse in einem Jar liegt, beginnt der String mit "file:". Danach folgt der Name
des Jars, dann der der Klasse. Mußt man halt noch auseinanderpflücken...
 

Sasa

Mitglied
Danke 0xdeadbeef! :toll: Damit habe ich auf alle Fälle schon mal eine Variante, die zuverlässig funktioniert.

Allerdings habe ich auch den Classpath noch nicht ganz abgeschrieben, wäre irgendwie einfacher. Ich habe mein Programm mit: "java -jar -classpath <beliebigerPfad> meinProgramm.jar" aufgerufen. Und System.getProperty("java.class.path") liefert sinngemäß immer noch die Ausgabe "meinProgramm.jar". Außerdem habe ich die Umgebungsvariable CLASSPATH manipuliert und es hatte keine Auswirkungen.

Roar hat gesagt.:
öhm, damit du das nich bei jedem jar build von hand machen musst?
Ach so, also nur um das ganze zu automatisieren. :roll:
 

0xdeadbeef

Top Contributor
Meine bisherige Erfahrung zeigt auch, daß der Classpath dem Namen des Jar-Files entspricht, wenn man den Classpath aus einem Jar heraus abfragt, und daß es sich nicht von "außen" beeinflussen läßt.
Ich bin mir aber halt nicht sicher, ob das eine zugesicherte Eigenschaft ist. Es wäre auch denkbar, daß dieses spezielle Verhalten nur bei bestimmten Versionen der JVM oder gar nur auf bestimmten Betriebssystemen auftritt.
 

Sasa

Mitglied
Um nun den eigentlichen Dateinamen aus der URL zu erhalten, habe ich folgenden Code geschrieben:
Code:
String jarFileName = null;
String s = this.getClass().getName().replace('.','/') + ".class";
URL url = this.getClass().getClassLoader().getResource(s);
String path = null;
try {
  path = URLDecoder.decode(url.getPath(),"UTF-8");
} catch (UnsupportedEncodingException e) {
  System.err.println(e);
  e.printStackTrace();
}
if (path != null && path.startsWith("file:")) {
  if (path.lastIndexOf(":/") > 4) { // Falls das Laufwerk "file" heißt
    int end = path.lastIndexOf(".jar!");
    int begin = path.lastIndexOf("/", end) + 1;
    jarFileName = path.substring(begin, end);
  }
}

Ich wüsste gerne, ob das eine vernünftige und zuverlässige Lösung ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Name des aktuellen Programms Allgemeine Java-Themen 7
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
S Variable als Objekt Name Allgemeine Java-Themen 3
J Apache POI - No external workbook with name Allgemeine Java-Themen 5
Neumi5694 Task-Name unter Windows Allgemeine Java-Themen 4
1 Name Generator für Videos Allgemeine Java-Themen 1
E Webservice zur Konvertierung IBAN/BIC -> Bank Name Allgemeine Java-Themen 1
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
D Name eines Nicht-String Objekts ausgeben Allgemeine Java-Themen 4
S Name einer Musikdatei auslesen und ändern Allgemeine Java-Themen 8
J IMDB Name und Bewertung auslesen Allgemeine Java-Themen 10
J .txt erstellen, nach name der vorhergehenden txt Allgemeine Java-Themen 7
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
P ActionListener / Label Name auslesen Allgemeine Java-Themen 2
S java -jar name.war. Wie Extraktionspfad umbiegen? Allgemeine Java-Themen 2
S [JUnit] Name von TestCase bekommen Allgemeine Java-Themen 4
D Passende Name für Methoden finden Allgemeine Java-Themen 3
Dit_ Registry, Preferences | Name des Knotens ändern. Allgemeine Java-Themen 2
E String name in class convertieren Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
S Konstrukt Sinn, Zewck und Name Allgemeine Java-Themen 6
Ark Name für Funktion gesucht Allgemeine Java-Themen 5
D variabler Listen name Allgemeine Java-Themen 3
M Name der Swing Komponente Allgemeine Java-Themen 3
C Name einlesen und Programm starten Allgemeine Java-Themen 2
S "Guessed User name" bei Tomcat belegen Allgemeine Java-Themen 2
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
M Name von Wochentagen vergleichen Allgemeine Java-Themen 3
M Zugriff auf Objekt, Name in Variable Allgemeine Java-Themen 3
F Welcher Name? paintsXY(), isPaintXY(), isPaintingXY() . Allgemeine Java-Themen 4
V Objekt einer Klasse, deren Name nur als String vorhanden Allgemeine Java-Themen 4
D Name der Java-Applikation Allgemeine Java-Themen 2
A Class File zur Laufzeit laden ohne den Binary Name zu kennen Allgemeine Java-Themen 11
G jar-Name einer Klasse Allgemeine Java-Themen 9
O String übergeben ist name eines JTextField wie zugreifen Allgemeine Java-Themen 9
Y fehler: wrong name serverA Allgemeine Java-Themen 3
F Parameter Name herausfinden Allgemeine Java-Themen 25
H Package name aus Class-File auslesen Allgemeine Java-Themen 11
P Duplicate name in Manifest Allgemeine Java-Themen 6
J Name des aktuell aktiven Windows-Fensters abfragen? Allgemeine Java-Themen 4
T JUSB - Name des USB Endgerätes zurückgeben Allgemeine Java-Themen 2
L Systeminformationen (PC-Name und Kennwort) auslesen Allgemeine Java-Themen 9
B Name eines komischen Klassenkonstruktes Allgemeine Java-Themen 14
S Sortierung einer Collection nach dem Attribut "name&quo Allgemeine Java-Themen 3
kodela StatusBar-Anzeigen auch in Log-Datei ausgeben Allgemeine Java-Themen 3
G Maven Projekt JAR-Datei Allgemeine Java-Themen 6
E XML - Datei Darstellung in IntelliJ als Baum Allgemeine Java-Themen 2
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
D Erste Schritte Mp3 Datei kann nicht von der Festplatte geöffnet werden - mit ChatGPT erstellt Allgemeine Java-Themen 7
J Filenotfoundexception obwohl Datei existiert Allgemeine Java-Themen 6
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
E Datei verschoben Event Allgemeine Java-Themen 3
D Datei mit "Kohsuke GitHub API" in Repository hochladen Allgemeine Java-Themen 2
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
G JavaFX Maven Projekt als .exe Datei exportieren Allgemeine Java-Themen 10
J (Geplante) Änderungen an einer Datei vorübergehend speichern und anwenden? Allgemeine Java-Themen 12
Neumi5694 Datei komprimiert Allgemeine Java-Themen 6
_user_q Obfuscate einer .jar-Datei mit ProGuard? Allgemeine Java-Themen 2
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
E java mithilfe url .jar datei öffnen Allgemeine Java-Themen 9
E Java .exe Datei mit args starten Allgemeine Java-Themen 2
W Bilder werden in App mit Jar-Datei nicht angezeigt Allgemeine Java-Themen 15
Master3000 Java Datei mehrmals einlesen Allgemeine Java-Themen 4
M Excel Datei Erstellen Allgemeine Java-Themen 2
E Input/Output Eigene Datei mit java öffnen Allgemeine Java-Themen 9
R Sonderzeichen aus Datei einlesen und in Datei ausgeben. Allgemeine Java-Themen 17
Tobero Download .jar von github lädt kaputte Datei runter Allgemeine Java-Themen 3
P Bat Datei in Java ausführen Allgemeine Java-Themen 2
S Verwendet Programmiersprache aus Quellcode - Datei ermitteln Allgemeine Java-Themen 6
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
J Jar-Datei ausführen Allgemeine Java-Themen 7
C Outlook msg-Datei Anhänge extrahieren Allgemeine Java-Themen 2
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
G Datei senden via Xmodem an Serial-Port Allgemeine Java-Themen 35
C Wav-Datei aus Jar laden? Allgemeine Java-Themen 11
L Best Practice Zip Datei aktualisieren Allgemeine Java-Themen 1
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
Gaudimagspam CSV-Datei auslesen in Java Allgemeine Java-Themen 7
S createTempFile erstellt keine temporäre Datei Allgemeine Java-Themen 13
Hatsi09 Jar datei ausführen verursacht NumberFormatException Allgemeine Java-Themen 9
kodela bestimmten Dateityp immer mit jar-Datei öffnen Allgemeine Java-Themen 17
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
B .txt Datei erstellen und auslesen bzw. schreiben Allgemeine Java-Themen 6
J Öffnen eine jar-Datei Allgemeine Java-Themen 11
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
N Txt Datei auslesen. Allgemeine Java-Themen 5
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
MiMa Datei verschieben hat einen Fehler?? Allgemeine Java-Themen 20
MiMa Erstellungsdatum einer Datei Allgemeine Java-Themen 10
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
O Java-Applikation tut in Netbeans, als JAR nicht, wegen Pfadangaben einer benötigten Datei Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben