/** * Merge two copystream listeners, either or both of which may be null. * * @param local the listener used by this class, may be null * @return a merged listener or a single listener or null * @since 3.0 */ private CopyStreamListener __mergeListeners(CopyStreamListener local) { if (local == null) { return __copyStreamListener; } if (__copyStreamListener == null) { return local; } // Both are non-null CopyStreamAdapter merged = new CopyStreamAdapter(); merged.addCopyStreamListener(local); merged.addCopyStreamListener(__copyStreamListener); return merged; }
try { InputStream stO = new BufferedInputStream(ftp.retrieveFileStream("foo.bar"), ftp.getBufferSize()); OutputStream stD = new FileOutputStream("bar.foo"); org.apache.commons.net.io.Util.copyStream(stO, stD, ftp.getBufferSize(), CopyStreamEvent.UNKNOWN_STREAM_SIZE, new CopyStreamAdapter() { public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) { // Your progress Control code here } }); ftp.completePendingCommand(); } catch (Exception e) { ... }
/** * This method is invoked by a CopyStreamEvent source after copying * a block of bytes from a stream. The CopyStreamEvent will contain * the total number of bytes transferred so far and the number of bytes * transferred in the last write. The CopyStreamAdapater will relay * the event to all of its registered listeners, listing itself as the * source of the event. * @param event The CopyStreamEvent fired by the copying of a block of * bytes. */ public void bytesTransferred(CopyStreamEvent event) { bytesTransferred(event.getTotalBytesTransferred(), event.getBytesTransferred(), event.getStreamSize()); }
streamListener = new CopyStreamAdapter() {
/** * This method is invoked by a CopyStreamEvent source after copying * a block of bytes from a stream. The CopyStreamEvent will contain * the total number of bytes transferred so far and the number of bytes * transferred in the last write. The CopyStreamAdapater will relay * the event to all of its registered listeners, listing itself as the * source of the event. * @param event The CopyStreamEvent fired by the copying of a block of * bytes. */ public void bytesTransferred(CopyStreamEvent event) { bytesTransferred(event.getTotalBytesTransferred(), event.getBytesTransferred(), event.getStreamSize()); }
CopyStreamAdapter copyStreamAdapter = new CopyStreamAdapter() { @Override public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) { updateUploadStats(totalBytesTransferred, bytesTransferred, streamSize); } }; FTPClient ftpClient = new FTPClient(); ftpClient.connect(url); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { ftpClient.disconnect(); throw new Exception("Unable to connect."); } if (!ftpClient.login(username, password)) { ftpClient.disconnect(); throw new Exception("Failed to login."); } ftpClient.setCopyStreamListener(copyStreamListener); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.enterLocalPassiveMode(); ftpClient.storeFile(targetPath, inputFile); ftpClient.logout(); ftpClient.disconnect();