Ftp + mostrar progresso do upload

Boa tarde estou utilizando o commons-net-1.4.1.jar com o codigo abaixo, esta funcionando perfeitamente.
Gostaria de saber se tem como colocar uma barra ou percentual de progresso

vlw

package br.com.ftp.util;

import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPClient;

public class FTPUtils {

	public FTPClient estabeleceConexao(String servidor, String usuario, String senha) {
		FTPClient ftp = new FTPClient();
		try {
			ftp.connect(servidor);
			// verifica se conectou com sucesso!
			if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
				ftp.login(usuario, senha);
				return ftp;
			} else {
				// erro ao se conectar
				ftp.disconnect();
				System.out.println("Conexão recusada");
				ftp = null;
			}
		} catch (Exception e) {
			System.out.println("Ocorreu um erro: " + e);

		}
		return ftp;
	}

	public static boolean transfereArqFTP(String servidor, String usuario, String senha, List<File> listaArquivos, String diretorio) {
		String nomeArquivo = null;
		FTPClient ftp = new FTPClient();
		try {
			ftp.connect(servidor);
			// verifica se conectou com sucesso!
			if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
				if (!ftp.login(usuario, senha)) {
					ftp.disconnect();
					System.out.println("Login recusado");
					return false;
				}
			} else {
				// erro ao se conectar
				ftp.disconnect();
				System.out.println("Conexão recusada");
				return false;
			}
			String dir = "";
			for (int i = 0; i < diretorio.length(); i++) {
				if (!diretorio.substring(i, i + 1).equals("\\")) {
					dir += diretorio.substring(i, i + 1);
				} else {
					if (!ftp.changeWorkingDirectory(dir.trim())) {
						ftp.disconnect();
						System.out.println("Diretório de envio informado inexistente");
						return false;
					} else {
						dir = "";
					}
				}
			}
			if (!ftp.changeWorkingDirectory(dir.trim())) {
				ftp.disconnect();
				System.out.println("Diretório de envio informado inexistente");
				return false;
			}
			// para cada arquivo informado...
			for (Iterator iter = listaArquivos.iterator(); iter.hasNext();) {
				File arquivo = (File) iter.next();
				// abre um stream com o arquivo a ser enviado
				InputStream is = new FileInputStream(arquivo);
				// pega apenas o nome do arquivo
				int idx = arquivo.getName().lastIndexOf(File.separator);
				if (idx < 0){
					idx = 0;
				} else {
					idx++;
				}
				nomeArquivo = arquivo.getName();

				// ajusta o tipo do arquivo a ser enviado
				if (arquivo.getName().endsWith(".txt")) {
					ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
				} else if (arquivo.getName().endsWith(".jpg")) {
					ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
				} else {
					ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
				}
				System.out.println("Enviando arquivo " + nomeArquivo + "...");
				// faz o envio do arquivo
				if (!ftp.storeFile(nomeArquivo, is)) {
					ftp.disconnect();
					System.out.println("Não foi possível enviar o arquivo " + nomeArquivo + "...");
					return false;
				} else {
					System.out.println("Arquivo " + nomeArquivo	+ " enviado com sucesso!");
				}
			}
			ftp.disconnect();
			return true;

		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} catch (Throwable e) {
			e.printStackTrace();
			return false;
		}
	}

	public static boolean getArquivosFTP(String servidor, String usuario, String senha, String dirRetorno, String diretorioRecebimento) {
		try {
			FTPClient ftp = new FTPClient();
			ftp.connect(servidor);
			// verifica se conectou com sucesso!
			if (FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
				if (!ftp.login(usuario, senha)) {
					ftp.disconnect();
					System.out.println("Login recusado");
					return false;
				}
			} else {
				// erro ao se conectar
				ftp.disconnect();
				System.out.println("Conexão recusada");
				ftp = null;
			}
			String dir = "";
			for (int i = 0; i < dirRetorno.length(); i++) {
				if (!dirRetorno.substring(i, i + 1).equals("\\")) {
					dir += dirRetorno.substring(i, i + 1);
				} else {
					if (!ftp.changeWorkingDirectory(dir.trim())) {
						ftp.disconnect();
						System.out.println("Diretório de recebimento informado inexistente");
						return false;
					} else {
						dir = "";
					}
				}
			}
			if (!ftp.changeWorkingDirectory(dir.trim())) {
				ftp.disconnect();
				System.out.println("Diretório de recebimento informado inexistente");
				return false;
			}
			FTPFile[] files = ftp.listFiles();
			for (int i = 2; i < files.length; i++) {
				if (files[i].getName().endsWith(".txt")) {
					ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
				} else if (files[i].getName().endsWith(".jpg")) {
					ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
				} else {
					ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
				}
				if (files[i].getName().startsWith("requisicao") || files[i].getName().startsWith("fornecedor") || files[i].getName().startsWith("pedido")) {
					File file = new File(diretorioRecebimento + "\\" + files[i].getName());
					OutputStream os = new FileOutputStream(file);
					if (!ftp.retrieveFile(files[i].getName(), os)) {
						System.out.println("Não foi possível trasnferir o arquivo " + files[i].getName() + "...");
					} else {
						System.out.println("Arquivo " + files[i].getName() + " trasnferido com sucesso!");
					}
				}
			}
			ftp.disconnect();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
}


package br.com.ftp;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import br.com.ftp.util.FTPUtils;

public class FTP {

	public static void main(String[] args) {
		try {
			Scanner sc = new Scanner(System.in);
			System.out.println("Digite o diretorio destino");
			String diretorioDestino = sc.next();
			List<File> listaArquivos = new ArrayList<File>();
			System.out.println("Digite o arquivo");
			String arquivo = sc.next();
			File file = new File(arquivo);
			if (file.isFile()){
				listaArquivos.add(file);
			}
			if(FTPUtils.transfereArqFTP("endereco do ftp", "usuario", "senha", listaArquivos, diretorioDestino)){
				System.out.println("Tranferencia feita com sucesso.");
			} else {
				System.out.println("Houve problema na tranferencia.");
			}
		} catch (Exception e) {
			System.out.println("Ocorreram problemas ao executar.");
		}
	}

}