executable jar und System.getProperty("user.dir");

Sixty

Mitglied
Hallo und hier mein Problem:

Ich erstelle aus meinem Java-Code ein executable jar. und lese die Dateien wie folgt ein

Code:
String pfad = 	System.getProperty("user.dir");

reader = new PdfReader(pfad+"/ResultXML2PDF.pdf");

klappt unter Eclipse auch. Nur wenn ich das .jar aufrufe, findet er die Dateien nicht. Ich muss erst via Terminal in das Verzeichnis wechseln
wo die .jar liegt. Zur Info die Dateien die eingelesen werden, befinden sich im selben Verzeichnis des .jar `s.

Was mache ich falsch?
 
Hi!
Das "user.dir" ist das Verzeichnis, aus dem der Java Befehl ausgerufen wurde.

Code:
c:\Test\ java -jar c:\bin\Test.jar
//user.dir würde c:\Test liefern

Dagegen würde
Code:
getClass().getProtectionDomain().getCodeSource().getLocation()

eine URL zum Jar-File liefern...

Grüße!
 
Danke für den Tipp und sieht auch besser aus. Jedoch ist das Problem jetzt einmal umgedreht.

Aufruf über Terminal:

Code:
java -jar /Users/sixty/Java/jars/pdf_sign.jar

Bekomme eine FilenotFoundException mit folgenden Pfaden:

Code:
java.io.FileNotFoundException: file:/Users/sixty/Java/jars/pdf_sign.jar/ResultXML2PDF.pdf (Not a directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
	at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
	at java.net.URL.openStream(URL.java:1007)
	at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:88)
	at com.itextpdf.text.pdf.RandomAccessFileOrArray.<init>(RandomAccessFileOrArray.java:79)
	at com.itextpdf.text.pdf.PRTokeniser.<init>(PRTokeniser.java:112)
	at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:161)
	at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:151)
	at SignedPdf.sign_pdf(SignedPdf.java:51)
	at SignedPdf.main(SignedPdf.java:166)
java.io.FileNotFoundException: file:/Users/sixty/Java/jars/pdf_sign.jar/Input_Sign/anton.cer (No such file or directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:106)
	at java.io.FileInputStream.<init>(FileInputStream.java:66)
	at SignedPdf.sign_pdf(SignedPdf.java:95)
	at SignedPdf.main(SignedPdf.java:166)


Gibt es noch einen anderen Befehl?
 
Hi!
Wie ich schon schrieb
Dagegen würde
Code:
getClass().getProtectionDomain().getCodeSource().getLocation()

eine URL zum Jar-File liefern...

Du darfst also nicht einfach diese URL nehmen und dich dann wundern, wieso es nicht klappt. Musst natürlich noch den Pfad extrahieren.

Zum Beispiel so:
Code:
Wie ich schon geschrieben habe, es wird eine URL zum Jar-File geliefert. Darfst also logischerweise nicht die komplette URL nehmen, sondern nur den Verzeichnispfad! 

 try {
            URL u = new URL("file:/c:/test/ext.pdf");
            File f = new File(u.getFile());
            System.out.println(f.getParent());
        } catch (MalformedURLException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

Ausgabe:
Code:
c:\test


Grüße!
 
Zurück