Relativer Pfad oder Dateien in Jar

meister-g

Bekanntes Mitglied
Hallo Leute,

ich stehe vor dem Problem PDF-Resourcen zu laden. Und zwar habe ich das einfach gemacht über Dateizugriff mit "./docs/meinpdf.pdf". Funktioniert wunderbar.
Jetzt wird die Anwendung über das Startmenü gestartet und "." ist ein ganz anderes Verzeichnis.
Kann ich das aktuelle Verzeichnis evtl irgendwie programmatisch auf das Verzeichnis der auszuführenden Jar setzen?

Wenn nicht war mein anderer Ansatz die PDFs über den Classloader zu laden, als Tempfile zu speichern und dann mit dem Acrobat Reader zu öffnen.
Problem hierbei ist aber, dass das Tempfile irgendwie beschädigt scheint oder noch ein Filehandle hat:
Java:
String path = "docs/meinpdf.pdf";
InputStream is = ClassLoader.getSystemResourceAsStream(path);
	       File tempFile = File.createTempFile("temp", ".pdf");
 // tempFile.deleteOnExit();  
	       FileOutputStream os=new FileOutputStream(tempFile);
	       copy(is, os);
mit
Java:
public static void copy( InputStream in, OutputStream out ) throws IOException   { 
	    byte[] buffer = new byte[1024];
	    for ( int len; (len = in.read(buffer)) != -1; ) 
	      out.write( buffer, 0, len ); 
	  }

Danach
Java:
Runtime.getRuntime().exec("cmd.exe /c startacrord32.exe /A \"nameddest=" + namedDest+ "\" \"" + 
					tempFile.getAbsolutePath() + "\");
klappt nicht. Datei scheint beschädigt oder noch irgendein Handle darauf.
Was mache ich falsch?
Die Dateien (auch mit EXE probiert) sind vorhanden und haben die richtige Größe.
Wenn ich das TempFile nicht automstisch löschen lasse, dann ist die Datei gültig.
Muss da evtl ein hack her wie z.b. den Thread kurz auf sleep() setzen oder so?

Das hässliche Öffnen des Acrobat Readers ist wegen der NamedDest notwendig. Es sei denn auch hier kann mir jemand weiterhelfen. Siehe auch:
http://www.java-forum.org/allgemeine-java-themen/98594-pdf-lesezeichen-nameddest-oeffnen.html

nachtrag:
Als einfacher fände ich es, dass ich die PDFs gar nicht ins JAR hinzufüge und eben das Arbeitsverzeichnis auf das ausführende JAR gelenkt werden kann. Wie mach ich das? Geht das irgendwie über den Classpath? Problem, dass ich hier ja gar kein Package habe.
 
Zuletzt bearbeitet:

meister-g

Bekanntes Mitglied
Habe eine Lösung gefunden, aber das ist schon sehr hässlich:

Java:
public static String getAppPath() {
    	try {
    		
    		String codeBase = new File(MainFrame.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getAbsolutePath();
    		if (codeBase.endsWith(".jar")) {
    			codeBase = codeBase.substring(0, codeBase.lastIndexOf(System.getProperty("file.separator")));
    		}
    		
    		return  codeBase + (codeBase.endsWith(System.getProperty("file.separator")) ? "" : System.getProperty("file.separator"));
    	} catch (Exception e) {
    		e.printStackTrace();
    		return null;
    	}
    }


Was ich nicht verstehe:
Ist es nicht ein Standardfall, dass ich Resourcen nicht in ein Jar einbinden möchte, den absoluten Pfad nicht kenne und das Programm auch von woanders aufgerufen werden kann, sodass relative Pfade ins Nirvana laufen?
Gibt es keine elegantere Lösung a) das working directory zu setzen oder b) an den "Basis" Ordner einer Applikation zu gelangen?

Warum die Variante oben nicht funktioniert mit der temporären Datei ist mir auch schleierhaft und den Fehler würde ich hier auch gerne entlarven.
 
G

Gastredner

Gast
Gibt es keine elegantere Lösung a) das working directory zu setzen oder b) an den "Basis" Ordner einer Applikation zu gelangen?
Das ist ja einer der Gründe dafür, weshalb viele Applikationen ihre Anwendungsdaten nicht in ihren eigenen Verzeichnissen, sondern irgendwo im home-Verzeichnis des Benutzers (oder einem ähnlichen, zentral zugänglichen Verzeichnis) ablegen. Da kommt man ja auch recht einfach ran:
Java:
File f = new File(System.getProperty("user.home") + "/.app/filename.file");
Sollte auf jedem System zuverlässig funktionieren.
 

meister-g

Bekanntes Mitglied
Das ist ja einer der Gründe dafür, weshalb viele Applikationen ihre Anwendungsdaten nicht in ihren eigenen Verzeichnissen, sondern irgendwo im home-Verzeichnis des Benutzers (oder einem ähnlichen, zentral zugänglichen Verzeichnis) ablegen. Da kommt man ja auch recht einfach ran:
Java:
File f = new File(System.getProperty("user.home") + "/.app/filename.file");
Sollte auf jedem System zuverlässig funktionieren.

für Properties und ao nutze ich auch solche vom Betriebssystem vergebenen Verzeichnisse.
Bzw Files, die ich zur laufzeit erzeuge.

Das Handbuch und eine exe, die aufgerufen wird, würde ich aber lieber in das Installationsverzeichnis legen.
Diese sind auch bei der Installation schon vorhanden.

Ich möchte nicht wissen, wieviele Java applikationen nicht funktionieren, wenn sie von einem anderen Ordner gestartet werden weil sie relativ zum Arbeitsverzeichnis Dateizugriffe machen
 
G

Gastredner

Gast
Ich würde mal behaupten, dass dies bei den meisten Programmen der Fall ist, unabhängig von der Programmiersprache.
Ansonsten würde mir noch folgendes einfallen: Bei der Installation - vorausgesetzt eine solche Existiert, alternativ vielleicht über ein Script oder sowas - speicherst du den Installationspfad mithilfe von Preferences an einem zentralen Ort und liest ihn von dort wieder aus, wenn du ihn benötigst.
 

meister-g

Bekanntes Mitglied
Jede Applikation unter Windows, die sich Verknüpfungen anlegt wird aber aus einem anderen Arbeitsverzeichnis gestartet.
Ich findes es echt komisch, dass meine Recherche da nicht mehr ergab und auch hier nichts gepostet wird.

Preferences beim Installer zu schreiben wäre die andere Möglichkeit, ja.
Wobei es schon komisch ist, wenn man einer Anwendung sagen muss wo sie liegt :)
 
G

Gastredner

Gast
Jede Applikation unter Windows, die sich Verknüpfungen anlegt wird aber aus einem anderen Arbeitsverzeichnis gestartet.
Das wär mir neu - und dieses Feld "Ausführen in" bei Verknüpfungen hätte ich dann auch ganz gerne nochmal erklärt:
attachment.php
;)
 

Anhänge

  • Zwischenablage01.png
    Zwischenablage01.png
    33,7 KB · Aufrufe: 80

meister-g

Bekanntes Mitglied
interessant, danke.
Das wusste ich gar nicht.

Mein für Windows erstelltes Setup erzeugt standardmäßig Verknüpfungen mit einem leeren Eintrag "Ausführen in"
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Classpath Relativer Pfad einer Resource? Allgemeine Java-Themen 9
M FileInputStream relativer Pfad in .jar Allgemeine Java-Themen 2
S relativer Pfad? Allgemeine Java-Themen 18
S Relativer Pfad in jsp Allgemeine Java-Themen 6
B relativer Pfad Allgemeine Java-Themen 18
G Relativer Pfad zu Pfad Allgemeine Java-Themen 2
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
izoards Java Home Pfad unabhängig von der Version Allgemeine Java-Themen 7
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
N relativier Pfad für sqlite-Datenbank in Gradle/IntelliJ Allgemeine Java-Themen 2
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
S Pfad zu Ressourcen Allgemeine Java-Themen 17
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
C FileOutputStream konkreter Pfad Allgemeine Java-Themen 3
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
sandaime CMD aufrufen und aktuellen pfad ändern Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
C pfad vom Image ausgeben lassen Allgemeine Java-Themen 5
O log4j pfad per umgebungsvariable setzen Allgemeine Java-Themen 5
K Classpath Falscher Pfad? o.O Allgemeine Java-Themen 2
S Shell Commands mit absolutem Pfad ausführen Allgemeine Java-Themen 2
F LWJGL in keinem Java libary Pfad? Allgemeine Java-Themen 2
D pfad zur jre linux Allgemeine Java-Themen 8
C Kompletter Pfad aus "input type=file" auslesen Allgemeine Java-Themen 3
M Input/Output Pfad mit Leerzeichen convertieren in Kurzschreibweise (~1, ~2, etc)? Allgemeine Java-Themen 10
C JAR, Pfad und Properties Allgemeine Java-Themen 17
P Pfad zu Dateien von "Tragbaren Gerät" Allgemeine Java-Themen 3
F Pfad der laufenden JAR ermitteln (mit Archivnamen) Allgemeine Java-Themen 2
U DLLs werden nicht gefunden trotz Pfad: Allgemeine Java-Themen 4
G log4j File erzeugen und Pfad bestimmen Allgemeine Java-Themen 3
A File Java Pfad Allgemeine Java-Themen 5
D JavaEE-WebApp Pfad auslesen Allgemeine Java-Themen 3
M Pfad in int[][] finden Allgemeine Java-Themen 4
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
C Environment Variable in Pfad -> Datei öffnen Allgemeine Java-Themen 5
D Pfad aus Ressource-Datei auslesen Allgemeine Java-Themen 7
S FileInputStream aplication Pfad Allgemeine Java-Themen 4
H Datei speichern -> Pfad erstellen? Allgemeine Java-Themen 1
T Pfad Anwendungsdaten unter Windows ermitteln Allgemeine Java-Themen 3
H2SO3- jar soll eigenen namen(pfad) finden Allgemeine Java-Themen 12
W HTML-Pfad Allgemeine Java-Themen 4
M Batch ausführen mit Leerzeichen im Pfad Allgemeine Java-Themen 7
C Applet: JFileChooser: PFad an HTML zürückgeben Allgemeine Java-Themen 4
MQue ClassLoader Pfad ausgeben Allgemeine Java-Themen 6
T Pfad aus Dateilesen -> wie diesen Pfad verwenden! Allgemeine Java-Themen 13
A Jar-File - Pfad Allgemeine Java-Themen 3
-horn- Kürzester Pfad: Code so eine gute Idee? Allgemeine Java-Themen 7
H absoluter Pfad ins working Directory Allgemeine Java-Themen 17
GambaJo Pfad zum Userprofil abhängig vom OS (/home Dok&Einst. us Allgemeine Java-Themen 3
R Wo ist der Pfad zur "Java(TM) Platform SE" Allgemeine Java-Themen 7
R Pfad zu PDF bei iText in Webapps Allgemeine Java-Themen 4
P Pfad der gerade ausgeführten Jar-Datei auslesen Allgemeine Java-Themen 2
R Entfernen der '..' Notation aus dem Pfad Allgemeine Java-Themen 2
T Java Applet PDF erstellen mit iText, Probleme mit Pfad Allgemeine Java-Themen 1
MasterEvil File.createTempFile liefert nur kurzen Pfad mit Tilde Allgemeine Java-Themen 3
T Wie bekomme ich den Pfad ohne Dateiname? Allgemeine Java-Themen 2
MQue Pfad splitten Allgemeine Java-Themen 2
P Pfad schließen xml Allgemeine Java-Themen 3
M Absoluter Pfad. Allgemeine Java-Themen 6
H Pfad einer Sounddatei von Soundkarte auslesen Allgemeine Java-Themen 15
G Problem Pfad zu wechseln Allgemeine Java-Themen 28
J Erkennen aus welchem Pfad das Jar gestartet wurde Allgemeine Java-Themen 6
S Relativen Pfad zu Pfad für File finden Allgemeine Java-Themen 4
G Problem mit Leerzeichen im Pfad bei File und getResouce Allgemeine Java-Themen 2
D Pfad ausfindig machen? Allgemeine Java-Themen 2
E Pfad angeben Allgemeine Java-Themen 5
M Den Pfad ermitteln aus dem die .jar Datei gestartet wurde Allgemeine Java-Themen 2
G ganze Pfad in einer Ordnerstruktur abbilden Allgemeine Java-Themen 19
G FileOpenDialog Pfad anlegen? Allgemeine Java-Themen 2
E in Pfad suchen Allgemeine Java-Themen 5
Q || Wie speichert man Dateien wo der Pfad als Link(UNIX)... Allgemeine Java-Themen 11
S Pfad Verwaltung Allgemeine Java-Themen 3
M Pfad zur Klasse ermitteln Allgemeine Java-Themen 2
L Pfad von Daten auf Server über FileChooseDialog Allgemeine Java-Themen 5
G absoluter pfad aus relativem Allgemeine Java-Themen 5
G Root-Pfad in einer Webapplikation finden Allgemeine Java-Themen 7
D Windows Pfad in UNC Pfad wandeln Allgemeine Java-Themen 4
G jar archiv und native klassen (pfad angabe) Allgemeine Java-Themen 2
P Leerzeichen im Pfad Allgemeine Java-Themen 8
I Pfad in einem String ändern Allgemeine Java-Themen 5
D Pfad zu meiner anwendung? Allgemeine Java-Themen 13
J Pfad problem Allgemeine Java-Themen 14
D Jar-Datei-Pfad Allgemeine Java-Themen 2
welterde Pfad zur Jar-Datei Allgemeine Java-Themen 7
S Runtime exec unter MacOS X will nicht "open pfad" Allgemeine Java-Themen 7
M TreePath aus einem Pfad? Allgemeine Java-Themen 4
K Falscher Pfad beim Laden eines Bildes Allgemeine Java-Themen 9
G Servlets: Ganzer Pfad und Dateiname des verschickten Forms Allgemeine Java-Themen 15
G Wie komme ich an den Pfad zu meinem Programm? Allgemeine Java-Themen 2
thE_29 DOS pfad bekommen - die Tilde Allgemeine Java-Themen 1
A Pfad mit Leerzeichen über exec starten Allgemeine Java-Themen 6
H Pfad für [Ini/DB]-Datei Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben