Mein Code wird in einer JAR-Datei ausgeführt, und ich muss den vollständigen Pfad dieser Datei abrufen. Zum Beispiel heißt meine JAR example.jar und befindet sich unter D: \ example \ Also muss ich "D: \ example \ example.jar" durch Code in diesem Jar erhalten. Ich habe viele Methoden versucht, um diesen Pfad zu bekommen, aber keiner von ihnen hat richtig funktioniert.Wenn Sie den Pfad einer laufenden JAR-Datei abrufen, wird "rsrc: ./" zurückgegeben.
Einer von ihnen ist
getClass().getProtectionDomain().getCodeSource().getLocation().toURI().getPath()
Viele Leute sagen, dass dies für sie funktioniert, aber es gibt „rsrc: ./“ für mich.
Ich habe danach gesucht, und ich bemerkte, dass mein MANIFEST.MF diese enthält:
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: Example
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Ich weiß nicht, was das bedeutet, aber wenn ich entfernen, dass Rsrc Sachen und ersetzen damit die anderen Dinge Es sagt, das Glas ist kaputt. Ich denke, das ist der Grund, warum es nicht funktioniert. Weiß jemand, was das bedeutet?
PS: Ich verwende meine JAR mit einer BAT-Datei.
Warum möchten Sie den Pfad der JAR? – SJuan76
'getPath()' * * konvertiert einen URI nicht in eine Datei. Selbst wenn es sich um eine Datei: URI handelt, kann der Pfadbereich Prozent-Escapes enthalten, so dass getPath() schließlich eine Zeichenfolge zurückgibt, die kein gültiger Dateiname ist. Der richtige Weg, um einen URI in einen Dateinamen umzuwandeln, ist 'Paths.get (uri)', aber er funktioniert nur mit Datei: URIs. Nichtsdestoweniger kann und sollte mit Class.getResource oder ClassLoader.getResource verfahren werden. – VGR
Sie können einen Pfad zum Jar selbst erhalten, aber es macht keinen Sinn, über einen Dateipfad zu einer Datei im Jar zu sprechen. – MeBigFatGuy