kuempi von stein
07-07-06, 13:52
Hello,
habe mal wieder ein JAVA-Problem.
Ich erstelle per Java ein PDF und versende es dann auch gleich per e-mail.
Soweit funktioniert alles bestens.
Problem ist, das das alles über ByteArrayInputStream bzw. ByteArrayOutputStream läuft und ich nun einen zweiten zusätzlichen Anhang für das e-mail anhängen möchte.
Der Sourcecode hier mal in groben Ausschnitten:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
ByteArrayOutputStream osANHANG1 = new ByteArrayOutputStream();
anhang1.transform(doc, osANHANG1);
ByteArrayInputStream bis =
new ByteArrayInputStream(osANHANG1.toByteArray());
mail.addAttachment("ANHANG.pdf", bis);
Der zweite (oder auch mehr) zusätzliche Anhang liegt direkt als File vor und muss vom Java nicht mehr erstellt werden.
Wie so oft in meinen jugendlichen Wahn, dachte ich, dass da ja keine grosse Sache ist und muss nun aber feststellen, dass mail.addAttachment einen ByteArrayInputStream verlangt.
Meine erste Überlegung war nun, die vorhandene File byteweise einzulesen, und sie dem ByteArrayInputStream zur Verfügung zu stellen.
Für den ersten Test hatte ich mir gedacht folgenden Code einfach hinter die Anweisung mail.addAttachment("ANHANG.pdf", bis); zu stellen:
File fi = new File("PROBE.jpg");
int dl = (int)fi.length();
byte[] daten = new byte[dl];
try {
FileInputStream fis = new FileInputStream(fi);
int bytes_read = 0;
while(bytes_read < dl ) {
bytes_read+=fis.read(daten,bytes_read,dl-bytes_read);
}
}
catch (IOException e) {
System.out.println(e);
}
ByteArrayInputStream bis = new ByteArrayInputStream(daten.toByteArray());
mail.addAttachment("TEST.jpg", bis);
Nun meine erste Frage:
F1: Wird das so funktionieren?
Leider hat ein erster Test schon mal zu einen Rückschlag geführt, da ich das Programm nicht mehr erstellen kann, (Fehlerzeiger direkt schon auf FILE) vermutlich weil das Hauptprogramm ja nicht mit allen Superklassen i.o. (heisst doch so?) arbeitet, sondern nur die drei import-Anweisungen hat wie oben im ersten Listing.
Warum ist mir nicht ganz klar, ich vermute mal, der ursprüngliche Erschaffer des Programms wollte Hauptspeicher sparen?
Nun gut dachte ich, hänge ich oben als vierten import eben noch import java.io.File; mit rein, aber er machts trotzdem nicht.
Zweite Frage:
F2: Welche Klasse muss ich denn dafür importieren?
Ich hoffe ich habe mich verständlich ausgedrückt und würde mich über baldige Antwort freuen.
kuempi
habe mal wieder ein JAVA-Problem.
Ich erstelle per Java ein PDF und versende es dann auch gleich per e-mail.
Soweit funktioniert alles bestens.
Problem ist, das das alles über ByteArrayInputStream bzw. ByteArrayOutputStream läuft und ich nun einen zweiten zusätzlichen Anhang für das e-mail anhängen möchte.
Der Sourcecode hier mal in groben Ausschnitten:
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
ByteArrayOutputStream osANHANG1 = new ByteArrayOutputStream();
anhang1.transform(doc, osANHANG1);
ByteArrayInputStream bis =
new ByteArrayInputStream(osANHANG1.toByteArray());
mail.addAttachment("ANHANG.pdf", bis);
Der zweite (oder auch mehr) zusätzliche Anhang liegt direkt als File vor und muss vom Java nicht mehr erstellt werden.
Wie so oft in meinen jugendlichen Wahn, dachte ich, dass da ja keine grosse Sache ist und muss nun aber feststellen, dass mail.addAttachment einen ByteArrayInputStream verlangt.
Meine erste Überlegung war nun, die vorhandene File byteweise einzulesen, und sie dem ByteArrayInputStream zur Verfügung zu stellen.
Für den ersten Test hatte ich mir gedacht folgenden Code einfach hinter die Anweisung mail.addAttachment("ANHANG.pdf", bis); zu stellen:
File fi = new File("PROBE.jpg");
int dl = (int)fi.length();
byte[] daten = new byte[dl];
try {
FileInputStream fis = new FileInputStream(fi);
int bytes_read = 0;
while(bytes_read < dl ) {
bytes_read+=fis.read(daten,bytes_read,dl-bytes_read);
}
}
catch (IOException e) {
System.out.println(e);
}
ByteArrayInputStream bis = new ByteArrayInputStream(daten.toByteArray());
mail.addAttachment("TEST.jpg", bis);
Nun meine erste Frage:
F1: Wird das so funktionieren?
Leider hat ein erster Test schon mal zu einen Rückschlag geführt, da ich das Programm nicht mehr erstellen kann, (Fehlerzeiger direkt schon auf FILE) vermutlich weil das Hauptprogramm ja nicht mit allen Superklassen i.o. (heisst doch so?) arbeitet, sondern nur die drei import-Anweisungen hat wie oben im ersten Listing.
Warum ist mir nicht ganz klar, ich vermute mal, der ursprüngliche Erschaffer des Programms wollte Hauptspeicher sparen?
Nun gut dachte ich, hänge ich oben als vierten import eben noch import java.io.File; mit rein, aber er machts trotzdem nicht.
Zweite Frage:
F2: Welche Klasse muss ich denn dafür importieren?
Ich hoffe ich habe mich verständlich ausgedrückt und würde mich über baldige Antwort freuen.
kuempi