package com.common.ftp;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
/**
* 封装公用的FTP操作
*
* @author ccj
*/
public abstract class FtpOrerate {
public String hostname; // ftp地址
public String username; // ftp登录用户名
public String password; // ftp登录密码
/**
* 封装公用的FTP操作,包括FTP登录,退出,同时隐藏FTP操作错误信息。
*
* @return
* @throws FtpConnectionException
*/
public boolean execute() throws FtpConnectionException {
// 操作是否成功
boolean isOK = false;
FTPClient ftp = null;
try {
ftp = new FTPClient();
ftp.connect(hostname);
boolean blogin = ftp.login(username, password);
/* 如果登录失败,则 trhow */
if (!blogin) {
throw new FtpConnectionException();
}
// 文件全部以二进制方式传递,如果需要上传文本,需要扩展此处
ftp.setFileType(FTP.BINARY_FILE_TYPE);
/* 取得操作成功标示 */
isOK = setCommand(ftp);
} catch (Exception e) {
// *******************/
System.err.println(e);
} finally {
/* 登出 */
if (ftp != null) {
try {
ftp.logout();
} catch (Exception e) {
}
}
/* 关闭连接 */
if (ftp != null) {
try {
ftp.disconnect();
} catch (Exception e) {
}
}
ftp = null;
}
return isOK;
}
/**
* 基本的ftp操作,需要子类还完成
*
* @param ftpClient
* @return
*/
protected abstract boolean setCommand(FTPClient ftpClient) throws IOException;
/**
* 设定ftp地址
*
* @param hostname
*/
public void setHostname(String hostname) {
this.hostname = hostname;
}
/**
* 设定ftp密码
*
* @param password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 设定ftp用户名
*
* @param username
*/
public void setUsername(String username) {
this.username = username;
}
}