package ftp; import gui.image.FTPEditDownloader_GUI; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import javax.swing.JOptionPane; import javax.swing.SwingWorker; /** * Execute file download in a background thread and update the progress. * * @author www.codejava.net * */ public class DownloadTask extends SwingWorker { private static final int BUFFER_SIZE = 4096; private String host; private int port; private String username; private String password; private String downloadPath; private String saveDir; private int percentCompleted; public DownloadTask(String host, int port, String username, String password, String downloadPath, String saveDir) { this.host = host; this.port = port; this.username = username; this.password = password; this.downloadPath = downloadPath; this.saveDir = saveDir; } /** * Executed in background thread */ @Override protected Void doInBackground() throws Exception { FTPUtility util = new FTPUtility(host, port, username, password); try { util.connect(); byte[] buffer = new byte[BUFFER_SIZE]; int bytesRead = -1; long totalBytesRead = 0; percentCompleted = 0; long start = System.nanoTime(); final double NANOS_PER_SECOND = 1000000000.0; final double BYTES_PER_MIB = 1024 * 1024; long fileSize = util.getFileSize(downloadPath); // gui.setFileSize(fileSize); String fileName = new File(downloadPath).getName(); File downloadFile = new File(saveDir + File.separator + fileName); FileOutputStream outputStream = new FileOutputStream(downloadFile); util.downloadFile(downloadPath); InputStream inputStream = util.getInputStream(); while ((bytesRead = inputStream.read(buffer)) != -1 && isCancelled() == false) { outputStream.write(buffer, 0, bytesRead); totalBytesRead += bytesRead; // System.out.println(totalBytesRead); double speed = NANOS_PER_SECOND / BYTES_PER_MIB * totalBytesRead / (System.nanoTime() - start + 1); percentCompleted = (int) (totalBytesRead * 100 / fileSize); setProgress(percentCompleted); firePropertyChange("speed", 0, speed); firePropertyChange("filesize", 0, fileSize); firePropertyChange("bytesread", 0, totalBytesRead); } outputStream.close(); util.finish(); } catch (FTPException ex) { JOptionPane.showMessageDialog(null, "Error downloading file: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); ex.printStackTrace(); setProgress(0); cancel(true); } finally { util.disconnect(); } return null; } /** * Executed in Swing's event dispatching thread */ @Override protected void done() { if (!isCancelled() && percentCompleted==100) { System.out.println("Datei erfolgreich heruntergeladen"); JOptionPane.showMessageDialog(null, "Datei erfolgreich heruntergeladen.", "Message", JOptionPane.INFORMATION_MESSAGE); } else if(!isCancelled() && percentCompleted != 100){ System.out.println("Datein wurde unvollständig heruntergeladen"); JOptionPane.showMessageDialog(null, "Datei wurde unvollständig heruntergeladen. Bitte wiederholen.", "Message", JOptionPane.INFORMATION_MESSAGE); } } }