package pwc.taxtech.atms.common.ftp; import org.apache.commons.lang3.StringUtils; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.apache.commons.pool2.impl.GenericObjectPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pwc.taxtech.atms.exception.ServiceException; import java.io.IOException; public class WrapFtpClient implements AutoCloseable { private static Logger logger = LoggerFactory.getLogger(WrapFtpClient.class); FTPClient ftpClient; GenericObjectPool<FTPClient> pool; public WrapFtpClient(FtpConfig config) throws Exception { FTPClient ftpClient = new FTPClient(); ftpClient.connect(config.getFtpHost(), config.getFtpPort()); int reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); logger.warn("FTPServer refused connection"); throw new ServiceException("FTPServer refused connection"); } boolean result = ftpClient.login(StringUtils.defaultString(config.getFtpUser()), StringUtils.defaultString(config.getFtpPwd())); if (!result) { throw new ServiceException("ftpClient登陆失败! userName:" + config.getFtpUser() + " ; password:" + config.getFtpPwd()); } ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setBufferSize(1024); ftpClient.setControlEncoding("UTF-8"); ftpClient.enterLocalPassiveMode(); this.ftpClient = ftpClient; } @Override public void close() throws Exception { try { if (ftpClient != null && ftpClient.isConnected()) { logger.debug("destroy ftp client {}", ftpClient.toString()); ftpClient.logout(); } } finally { try { if (ftpClient != null && ftpClient.isConnected()) ftpClient.disconnect(); } catch (IOException io) { io.printStackTrace(); } } } }