Ich habe mir ein E-Mail Programm geschrieben. Mitlerweile ist es mir sogar gelungen Anhange runterzuladen. Dafür muss man sich den InputStream eines BodyParts holen und dann mit BufferedOutputStream und FileOutputStream den Datei erstellen. Das funktioiert soweit.
Nun muss man allerdings, bevor man eine JProgressBar mit setValue() Werten übergibt, bei dieser zuvor die maximale Größe einstellen. Jedoch weis ich nicht, wie man von InputStream den benötigten maximalen Wert bekommt.
So soll es in etwa werden:
Falls man nach der for-Schleife counter ausgibt, kommt ein anderer Wert raus, als durch irgendeine
Methode von den Inputsream is erreicht werden könnte!
Oder muss ich vieleicht anders vorgehen? - Evtl. schon vorher durch die message oder was anderes von javax.swing.mail die Größe des Anhangs ermitteln?
Vielen Dank für die Antworten!!!
Nun muss man allerdings, bevor man eine JProgressBar mit setValue() Werten übergibt, bei dieser zuvor die maximale Größe einstellen. Jedoch weis ich nicht, wie man von InputStream den benötigten maximalen Wert bekommt.
So soll es in etwa werden:
Java:
public void downloadFile(final JProgressBar progress, final String filename, final int number) {
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
BufferedOutputStream fos = null;
BufferedInputStream is = null;
@Override
protected Void doInBackground() throws Exception {
String userhome = System.getProperty("user.home");
String separator = System.getProperty("file.separator");
File file = new File(userhome+separator+"Downloads"+separator+filename);
if(!file.exists()) file.createNewFile();
is = inputstreams.get(number);
fos = new BufferedOutputStream(new FileOutputStream(file));
//progress.setMaximum(???);
byte[] buffer = new byte[1024];
int counter = 0;
for (int length; (length = is.read(buffer)) != -1;) {
fos.write(buffer, 0, length);
counter++;
progress.setValue(counter);
}
return null;
}
@Override
public void done() {
System.out.println("Downloaded!");
try {
fos.flush();
fos.close();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
};
worker.execute();
}
Methode von den Inputsream is erreicht werden könnte!
Oder muss ich vieleicht anders vorgehen? - Evtl. schon vorher durch die message oder was anderes von javax.swing.mail die Größe des Anhangs ermitteln?
Vielen Dank für die Antworten!!!