Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich möchte aufgrund eines vorhandenen InputStream eine Datei erstellen und speichern. Der InputStream kommt von einer Datei, die als Attachement an einer ausgelesenen Mail hängt.
Ich habe aber irgendwie ein Problem mit der Umsetzung vom InputStream hin zum letztendlichen Speichern der Datei! (Denkfehler oder fehlerhafter Programmablauf?). Hier mal die Funktion, die eine Datei aus dem InputStream machen/speichern soll:
Code:
private static void saveFile(String filename, InputStream inputStr){
try{
InputStreamReader inReader = new InputStreamReader(inputStr);
BufferedReader buffReader = new BufferedReader(inReader);
String read = buffReader.readLine();
StringBuffer strBuffer = new StringBuffer();
while ( read != null) {
strBuffer.append(read);
}
BufferedWriter buffWriter = new BufferedWriter( new FileWriter("/home/hallbauer/workspace/tmp/" + filename) );
buffWriter.write(strBuffer.toString());
buffWriter.close();
}catch(Exception err){
System.out.println(err);
}
}
Mh, ich lese jetzt schon ne Weile im Buch... aber irgendwie ist das sehr konfus beschrieben (leider auch ohne Code)!
Also ich habe meinen InputStream. Diesen übergebe ich an den InputStreamReader, der diesen dann quasi einliest?!
Code:
private static void saveFile(String filename, InputStream inputStr){
InputStreamReader inReader = new InputStreamReader(inputStr);
...
//hier dann OutputStreamReader und OutputStream...
//...um schließlich in eine neue Datei mit 'filename' zu speichern
}
Dann brauche ich den ganzen Zirkus mit BufferedReader und BufferedWriter nicht, sonder nehme stattdessen einen OutputStreamReader und OutputStream, um die Daten aus dem InputStreamReader in ein File zu speichern?! Habe ich das richtig verstanden/interpretiert?
Mir ist noch nicht klar, wie ich die Verbindung vom Input zum Output herstelle.
Habt ihr mal ne Quelle mit Codebeispielen zur Hand, damit ich das mal sehe?
Wie der Name vermuten lässt, handelt es sich bei einem InputStreamReader ebenfalls um einen Reader und bei einem OutputStreamWriter ebenfalls um einen Writer ...
Ich will mal nicht so sein:
Code:
private static void saveFile(String filename, InputStream inputStr) throws IOException {
FileOutputStream fos = new FileOutputStream(filename);
int temp = -1;
while ((temp = inputStr.read()) != -1) {
fos.write(temp);
}
fos.close();
}
Kommt auf die größe der Datei an bzw. die Datenmenge des Streams. Schneller geht es z. B. mit gepufferten Streams oder mit den Klassen aus dem java.nio package.
Naja, so ein Mailanhang kann schonmal paar MB´s haben!
Wenn dann ein Postfach zum ersten mal ausgelesen wird, sind bestimmt mal 50 Mails, teilweise mit Anhang, drin. Ich will das ja erst noch so basteln, dass nur neue (ungelesene) Mails abgeholt werden... aber das wird sicher ein extra Post werden?! :wink:
Macht sich dann zeittechnisch gesehen die Nutzung von gepufferten Streams sehr bemerkbar?
Wahnsinn.... Habe das jetzt mal gepuffert probiert - das sind ja Welten!
Code:
FileOutputStream fos = new FileOutputStream(filename);
BufferedOutputStream bos = new BufferedOutputStream(fos);
BufferedInputStream bis = new BufferedInputStream(inputStr);
int aByte;
while ((aByte = bis.read()) != -1) {
bos.write(aByte);
}
bos.flush();
bos.close();
bis.close();