Dateizugriff im JAR

Status
Nicht offen für weitere Antworten.

tuomo

Aktives Mitglied
Hallo Leutz,

ich weiß zwar nicht ob das ne Anfängerfrage ist, aber ich denk es kann ja nicht so schwer sein. Also..

Ich hab eine Klasse die über die Methode einer anderen Klasse (nicht von mir) eine Email verschicken soll. An die Email soll ein PDF gehangen werden. Dieses PDF habe ich meinem Jar hinzugefügt, d.h. wenn ich das Jar öffne, dann liegt das PDF mit drin. Nun meine Frage:

Wie kann ich auf das PDF zugreifen, das ich der Methode sendMail(String pText, File pAnhang) die Datei übergeben kann?

Ich habe schon in verschiedenen Foren recherchiert, u.a. auch hier, aber ich bin leider nicht weiter gekommen. Ich weiß, dass man den ClassLoader benutzt, um auf Dateien im Jar zuzugreifen. Leider bekomm ich das nicht hin. Hier mal ein bischen Code:
Code:
String lPath = this.getClass().getClassLoader().getResource("/agb.pdf").getPath();
File lAnhang = new File(lPath);

sendMail("TestText", lAnhang);
Wenn ich das so ausführe, bekomm ich eine IOException, dass die Datei nicht gefunden werden kann.

Wie kann ich den nun ein File-Objekt aus dem im Jar-liegenden PDF erzeugen??

Ich werd noch wahnsinnig.

Bitte um Hilfe!! Danke.
 

Niki

Top Contributor
Ich bin mir nicht sicher ob es funktioniert da ich es nicht getestet habe, aber probier mal das:

Code:
	URL url = getClass().getResource("...");
	File f = new File(url.toURI());
 

Wildcard

Top Contributor
Du kannst kein File Objekt erzeugen, weil es keine Datei ist.
Du brauchst APIs die wahlweise mit InputStream oder URL Arbeiten können. File wird nicht funktionieren.
 

tuomo

Aktives Mitglied
Gibt es denn eine Möglichkeit, das selber hinzubiegen?

Kann man vielleicht aus einem InputStream eine temporäre Datei erzeugen und diese dann übergeben?

Und warum ist das keine Datei mehr?
 

Wildcard

Top Contributor
Kann man, aber das sollte nicht notwendig sein. Alle sinnvollen APIs können mit InputStreams arbeiten.
Und warum ist das keine Datei mehr?
Die jar ist eine Datei. Die Resource sind ein paar bits in der Jar Datei.
 

tuomo

Aktives Mitglied
Das Problem ist, dass ich an der Methode so erstmal nichts ändern kann, vorläufig ;). Das ist ne Projekt-Arbeit. Ich bräuchte jetzt erstma ein Workaround.

Du sagst, man kann direkt mit dem InputStream arbeiten. Die Methode, die in der Mail-Methode verwendet wird, erwartet einen javax.activation.DataHandler dem eine DataSource-Objekt übergeben wird. Ich glaub, dass gehört alles zur JavaMailAPI. Wie kann ich denn aus dem InputStream eine DataSource machen? Ich bin auf dem Gebiet der Stream nicht wirklich bewandert.. :(

Wenn das geht, überschreib ich die Methode einfach.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben