//****************************************************************************** //* //* (c) Copyright 2003, Glub Tech, Incorporated. All rights reserved. //* //* $Id: SimpleProgressFTP.java 37 2009-05-11 22:46:15Z gary $ //* //****************************************************************************** import com.glub.secureftp.bean.*; import java.io.*; import java.util.*; import java.text.*; public class SimpleProgressFTP { public static void main( String[] args ) { String host = null; String user = null; String pass = null; String dir = null; if ( args.length < 4 ) { host = "ftp.adobe.com"; user = "anonymous"; pass = "guest@"; dir = "/pub/adobe/acrobat/win/5.x"; } else { host = args[0]; user = args[1]; pass = args[2]; dir = args[3]; } SimpleProgressFTP ftp = new SimpleProgressFTP(host, user, pass, dir); } public SimpleProgressFTP( String host, String user, String pass, String dir ) { FTP client = new FTP( host, 21 ); try { client.connect(); client.login( user, pass ); client.setConnectionType( FTP.PASV_CONNECTION_TYPE ); client.binary(); client.chdir( dir ); System.out.println( "Working directory = " + client.pwd() ); RemoteFileList rfl = client.list(); System.out.println( "Files in this directory:" ); for (int i = 0; i < rfl.size(); i++ ) { System.out.println(" " + rfl.getFile(i).getFileName()); } ProgressThread pt = null; pt = new ProgressThread(); pt.start(); try { System.out.println( "Downloading " + rfl.getFile(0).getFileName() ); client.retrieve( rfl.getFile(0).getFileName(), new File("downloaded.file"), false, pt ); } finally { if ( pt != null && pt.isRunning() ) { pt.finishProgress(); } } client.logout(); } catch ( Exception e ) { System.err.println("An error occured: " + e.getMessage()); } } } class ProgressThread extends Thread implements Progress { private boolean stop = false; private int index; private String progress = ""; private long total = 0; private int indeterminateState = -1; public void run() { while (!stop) { try { System.out.print(" \b\r" + progress); System.out.flush(); this.sleep(5); } catch (InterruptedException ie) {} } } public boolean isRunning() { return !stop; } public void startProgress() {} public void finishProgress() { stop = true; System.out.println(" \b\r" + total + " of " + total + " bytes transferred." ); } public void updateProgress( long pos, long total ) { StringBuffer buf = new StringBuffer(); buf.append(pos); if ( indeterminateState < 0 ) { buf.append(" of "); buf.append(total); } buf.append(" bytes transferred." ); progress = buf.toString(); this.total = total; } }