Start und 'Programm'-Verzeichnis
(Autor: J e n ѕ, Frage gestellt am Fr, 12. Sep 2003)
tach zusammen.
Wenn ich eine Javaanwendung (in einem .jar-Archiv) starte, ist in den meisten Fällen das Verzeichnis mit der jar-Datei auch das aktuelle Verzeichnis. Es gibt allerdings auch Fälle in denen das "Startverzeichnis" nicht das mit der .jar-Datei ist. Wie bekomme ich trotzdem das "Programmverzeichnis" der jar-Datei heraus?
Beispiel:
Das .jar-Archiv app.jar liegt in c:\projekte\
befinde ich mich in diesem Verzeichnis und starte das Archiv mit
Befinde ich mich in z.B. dem Verzeichnis C:\temp und starte das Archiv mit
Gruss Jens
Wenn ich eine Javaanwendung (in einem .jar-Archiv) starte, ist in den meisten Fällen das Verzeichnis mit der jar-Datei auch das aktuelle Verzeichnis. Es gibt allerdings auch Fälle in denen das "Startverzeichnis" nicht das mit der .jar-Datei ist. Wie bekomme ich trotzdem das "Programmverzeichnis" der jar-Datei heraus?
Beispiel:
Das .jar-Archiv app.jar liegt in c:\projekte\
befinde ich mich in diesem Verzeichnis und starte das Archiv mit
java -jar app.jarist alles in Ordnung.
Befinde ich mich in z.B. dem Verzeichnis C:\temp und starte das Archiv mit
java -jar C:\projekte\app.jarist mein Startverzeichnis nicht mehr das mit der .jar-Datei. Aber genau dieses Verzeichnis hätte ich gerne gewußt.
Gruss Jens
Artikelbaum anzeigen
Re: Start und 'Programm'-Verzeichnis
(Autor: Ј . Ρ . J а r ο l і m, Antwort nach 7 h, 2 Min)
Hi.
Was probierenswert wäre: Mach doch mal per java.io.File das derzeitige Verzeichnis (aus Sicht der Applikation) auf und schau nach, welches das ist.
mfG,
J.P.Jarolim
Was probierenswert wäre: Mach doch mal per java.io.File das derzeitige Verzeichnis (aus Sicht der Applikation) auf und schau nach, welches das ist.
mfG,
J.P.Jarolim
Re^2: Start und 'Programm'-Verzeichnis
(Autor: J е n ѕ, Antwort nach 1 Tag, 2 h, 57 Min)
Hi J.P
Gruss Jens
Was probierenswert wäre: Mach doch mal per java.io.File das
derzeitige Verzeichnis (aus Sicht der Applikation) auf und
schau nach, welches das ist.
Das Startverzeichnis. Das war mir schon bekannt. Aber das ist nicht das was ich suche. Ich möchte zur Laufzeit das "Programmverzeichnis" haben.derzeitige Verzeichnis (aus Sicht der Applikation) auf und
schau nach, welches das ist.
Gruss Jens
Re: Start und 'Programm'-Verzeichnis
(Autor: E n n o S a n d n е r, Antwort nach 1 Tag, 2 h, 15 Min)
Hallo,
schau' mal in die Manifest-Datei des Jars (jar xf xyz.jar META-INF/MANIFEST.MF). Dort sind sicher einige jars im "Class-Path" angegeben (evtl. als relativer Pfad). Anhand derer Position läßt sich auf das Startverzeichnis des ausführbaren Jars schließen.
Gruss
Enno
schau' mal in die Manifest-Datei des Jars (jar xf xyz.jar META-INF/MANIFEST.MF). Dort sind sicher einige jars im "Class-Path" angegeben (evtl. als relativer Pfad). Anhand derer Position läßt sich auf das Startverzeichnis des ausführbaren Jars schließen.
Gruss
Enno
Re^2: Start und 'Programm'-Verzeichnis
(Autor: J e n ѕ, Antwort nach 1 Tag, 3 h, 1 Min)
Hi Enno
Die manifest.mf ist mit bekannt. Aber daraus läßt sich meines Wissens nicht die Position des eigenen jar-Archivs (zur Laufzeit !!) ermitteln :-(
Gruss Jens
schau' mal in die Manifest-Datei des Jars (jar xf xyz.jar
META-INF/MANIFEST.MF). Dort sind sicher einige jars im
"Class-Path" angegeben (evtl. als relativer Pfad). Anhand
derer Position läßt sich auf das Startverzeichnis des
ausführbaren Jars schließen.
Das funktioniert leider nicht zur Laufzeit des Jars. Wenn ich eine test.jar starte möchte ich zur Laufzeit dieser jar-Datei gerne wissen in welchem Verzeichnis sich diese jar-Datei befindet.META-INF/MANIFEST.MF). Dort sind sicher einige jars im
"Class-Path" angegeben (evtl. als relativer Pfad). Anhand
derer Position läßt sich auf das Startverzeichnis des
ausführbaren Jars schließen.
Die manifest.mf ist mit bekannt. Aber daraus läßt sich meines Wissens nicht die Position des eigenen jar-Archivs (zur Laufzeit !!) ermitteln :-(
Gruss Jens
Re^3: Start und 'Programm'-Verzeichnis
(Autor: Е n n ο Ѕ a n d n е r, Antwort nach 1 Tag, 19 h, 10 Min)
Hallo,
ein Hack wäre es sich die URL einer im Jar definierten Resource zu holen, z.B. das Class-File der Main-Class. Bsp.:
Manifest unter META-INF/MANIFEST.MF anlegen:
File Test.java:
Übersetzen und packen & ausführen:
Als Ausgabe bekomme ich:
wird Test.jar an einer anderen Stelle gestartet, ändert sich der Pfad entsprechend. Evtl. hilft Dir das weiter.
Gruss
Enno
ein Hack wäre es sich die URL einer im Jar definierten Resource zu holen, z.B. das Class-File der Main-Class. Bsp.:
Manifest unter META-INF/MANIFEST.MF anlegen:
Manifest-Version: 1.0 Created-By: 1.4.1-beta (Sun Microsystems Inc.) Main-Class: Test
File Test.java:
public class Test
{
public static void main(String[] args)
{
System.out.println(
Test.class.getClassLoader().getResource("Test.class").getFile()
);
}
}
Übersetzen und packen & ausführen:
javac Test.java jar cmvf META-INF/MANIFEST.MF Test.jar Test.class java -jar Test.jar
Als Ausgabe bekomme ich:
file:/home/user1/sandner/TT/Test.jar!/Test.class
wird Test.jar an einer anderen Stelle gestartet, ändert sich der Pfad entsprechend. Evtl. hilft Dir das weiter.
Gruss
Enno
Re^4: jar-Dateien finden
(Autor: Ј е n ѕ, Antwort nach 2 Tagen, 2 h, 17 Min)
Hi Enno
Danke für den Hinweis. Ich habe mal etwas weiter gesponnen und 'nen kleine Klasse dazu gemacht:
Gruss Jens
Danke für den Hinweis. Ich habe mal etwas weiter gesponnen und 'nen kleine Klasse dazu gemacht:
package de.nigjo.util;
import java.io.File;
import java.net.URL;
/** liefert die Position des .jar-Archives in dem sich eine Klasse befindet.
*
* @author nigjo
*/
public class JarSearcher
{
private Class searchClass;
public JarSearcher()
{
}
public static File getJar(Object obj)
{
JarSearcher searcher = new JarSearcher();
searcher.setClass(obj.getClass());
return searcher.findJar();
}
/** liefert das File-Objekt der .jar-Datei.
*
* @return <code>null</code> wenn Klasse nicht in einer .jar-Datei ist
*/
private File findJar()
{
String klasse = getClassURL().getFile();
if (klasse.indexOf(".jar!") >= 0)
{
String jar = klasse.substring(0, klasse.indexOf(".jar!") + 4);
return new File(jar);
}
// keine jar-Datei gefunden.
return null;
}
private URL getClassURL()
{
String name = searchClass.getName();
name = name.replaceAll("\\.", "/");
return searchClass.getClassLoader().getResource(name + ".class");
}
private void setClass(Class toSearch)
{
searchClass = toSearch;
}
/** liefert das Verzeichnis der jar-Datei, in dem sich die Klasse zum
* angegebenen Objekt befindet.
*
* @param obj
* @return <code>null</code> wenn Klasse nicht in einer .jar-Datei ist.
*/
public static File getJarDirectory(Object obj)
{
// suche Jar-Datei
File jar = getJar(obj);
if (jar != null)
{
// jar-Datei gefunden.
return jar.getParentFile();
}
// jar-Datei nicht gefunden
return null;
}
}Gruss Jens
found it
(Autor: Ј . Ρ . Ј а r ο l i m, Antwort nach 1 Tag, 19 h, 28 Min)
So - Nach ein bissale suchen:
Ausgehend von der Annahme, das du ein File "Test.class" im root des jar's liegen hast, könntest du folgendes ausprobieren:
<snip>
String ResourceName="Test.class";
String myCoolFoundPath = this.getClass().getClassLoader().getResource(resourceName).toString();
System.out.println(myCoolFoundPath);
</snip>
mfG,
J.P.Jarolim
Ausgehend von der Annahme, das du ein File "Test.class" im root des jar's liegen hast, könntest du folgendes ausprobieren:
<snip>
String ResourceName="Test.class";
String myCoolFoundPath = this.getClass().getClassLoader().getResource(resourceName).toString();
System.out.println(myCoolFoundPath);
</snip>
mfG,
J.P.Jarolim
Ah - zu spät lol
(Autor: J . Р . Ј a r o l і m, Antwort nach 1 Tag, 20 h, 48 Min)
Kommt davon, wenn man die Threads nicht anschaut - Hattest du eh schon die Antwort lol.
mfG,
J.P.Jarolim
mfG,
J.P.Jarolim
Du kannst auf diesen Artikel nicht antworten.
Dieser Artikelbaum ist im Archiv des Experten-Forums von wer-weiss-was zum Thema "Java" archiviert. Es handelt sich um keine aktuelle Diskussion, daher kann auf die Artikel nicht mehr geantwortet werden.
Folgende Artikel könnten Dich auch interessieren:
Jar-Bilder.jar Datei integrieren
.jar-File und Mac OS 9
Zugriff auf Bilder in jar-Archiv
JAR-Datei
jar-Datei
img weg...
Probleme beim Kompilieren eines Software-Projekts
Jar-Datei hochladen
Tomcat - MySQL-Connector durch WebApp laden
Film aus Java JAR-Archiv extrahieren
JAR erzeugen mit (Visual J++ 6.0 oder Tool)
vorheriger Artikelbaum
(JBuilder: 'neu erzeugen' vs. 'aktualisieren')
(OptimalJ3 Professional und MySQL4)
nächster Artikelbaum















