importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.SocketException;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.apache.commons.net.ftp.FTP;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPReply;public classFtpUtil {private final static Log logger = LogFactory.getLog(FtpUtil.class);/*** 获取FTPClient对象
*
*@paramftpHost
* FTP主机服务器
*@paramftpPassword
* FTP 登录密码
*@paramftpUserName
* FTP登录用户名
*@paramftpPort
* FTP端口 默认为21
*@return
*/
public staticFTPClient getFTPClient(String ftpHost, String ftpUserName,
String ftpPassword,intftpPort) {
FTPClient ftpClient= newFTPClient();try{
ftpClient= newFTPClient();
ftpClient.connect(ftpHost, ftpPort);//连接FTP服务器
ftpClient.login(ftpUserName, ftpPassword);//登陆FTP服务器
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
logger.info("未连接到FTP,用户名或密码错误。");
ftpClient.disconnect();
}else{
logger.info("FTP连接成功。");
}
}catch(SocketException e) {
e.printStackTrace();
logger.info("FTP的IP地址可能错误,请正确配置。");
}catch(IOException e) {
e.printStackTrace();
logger.info("FTP的端口错误,请正确配置。");
}returnftpClient;
}/*** 下载文件
*
*@paramftpHost ftp服务器地址
*@paramftpUserName anonymous匿名用户登录,不需要密码。administrator指定用户登录
*@paramftpPassword 指定用户密码
*@paramftpPort ftp服务员器端口号
*@paramftpPath ftp文件存放物理路径
*@paramfileName 文件路径
*@paraminput 文件输入流,即从本地服务器读取文件的IO输入流*/
public static voiddownloadFile(String ftpHost, String ftpUserName,
String ftpPassword,intftpPort, String ftpPath, String localPath,
String fileName) {
FTPClient ftpClient= null;try{
ftpClient=getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
ftpClient.setControlEncoding("UTF-8"); //中文支持
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.changeWorkingDirectory(ftpPath);
File localFile= new File(localPath + File.separatorChar +fileName);
OutputStream os= newFileOutputStream(localFile);
ftpClient.retrieveFile(fileName, os);
os.close();
ftpClient.logout();
}catch(FileNotFoundException e) {
logger.error("没有找到" + ftpPath + "文件");
e.printStackTrace();
}catch(SocketException e) {
logger.error("连接FTP失败.");
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
logger.error("文件读取错误。");
e.printStackTrace();
}
}/*** 上传文件
*
*@paramftpHost ftp服务器地址
*@paramftpUserName anonymous匿名用户登录,不需要密码。administrator指定用户登录
*@paramftpPassword 指定用户密码
*@paramftpPort ftp服务员器端口号
*@paramftpPath ftp文件存放物理路径
*@paramfileName 文件路径
*@paraminput 文件输入流,即从本地服务器读取文件的IO输入流*/
public static voiduploadFile(String ftpHost, String ftpUserName,
String ftpPassword,intftpPort, String ftpPath,
String fileName,InputStream input){
FTPClient ftp=null;try{
ftp=getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
ftp.changeWorkingDirectory(ftpPath);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
fileName=new String(fileName.getBytes("GBK"),"iso-8859-1");
ftp.storeFile(fileName, input);
input.close();
ftp.logout();
System.out.println("upload succes!");
}catch(Exception e) {
e.printStackTrace();
}
}
}