private static final String defaultCharsetName = "ISO-8859-1";// 下载文件时,使用的编码格式,好像一定要这个编码,中文文件名的文件才可以下载成功
private static final String remoteCharsetName = "GBK";// 远程ftp服务器的编码格式
链接FTP服务器代码
public boolean connect() {
boolean flg = false;
try {
logger.info("正在登录:" + ftpInfo.getHost());
ftpClient = new FTPClient();
ftpClient.connect(ftpInfo.getHost());
if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
if (ftpClient.login(ftpInfo.getUsername(),
ftpInfo.getPassword())) {
ftpClient.setControlEncoding(remoteCharsetName);// <----远程ftp服务器的编码格式
// 设置设置被动模式传输
ftpClient.enterLocalPassiveMode();
// 设置以二进制流的方式传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setKeepAlive(true);
logger.info("登录主机:" + ftpInfo.getHost() + " 成功!");
flg = true;
}
} else {
// 断开ftp连接
disconnect();
logger.info("FTP server refused connection.");
flg = false;
}
flg = true;
} catch (ConnectException ce) {
logger.error("失败!FTP服务器连接失败,请确认服务器是否已启动。\r\n" + ce.toString());
} catch (IOException e) {
logger.error("失败!请检查端口是否正确" + e.toString());
} catch (Exception e) {
logger.error("失败!登录FTP服务器发生异常!" + e.toString());
}
return flg;
}
下载文件:
public boolean download(String localPath)
throws UnsupportedEncodingException, IOException {
try {
// 连接FTP服务器
if (!connect()) {
return false;
}
setWorkDirectory(ftpInfo.getHost());// 转移到(远程文件夹路径 )FTP服务器目录
if (!localPath.endsWith("/")) {
localPath = localPath + "/";
}
FTPFile[] fs = ftpClient.listFiles();
Arrays.sort(fs, new FtpFileNameComparator());
for (FTPFile ff : fs) {
if (ff.isFile() && isCsvFile(ff.getName())) {
// 本地文件路径和文件名
File localFile = new File(localPath + ff.getName());
OutputStream os = new FileOutputStream(localFile);
boolean flg = ftpClient.retrieveFile(new String(ff
.getName().getBytes(remoteCharsetName),
defaultCharsetName), os);// 取回存档文件,defaultCharsetName一定要是"ISO-8859-1"否则好像不行,重要*
if (flg) {
logger.info("文件下载成功!文件名:" + ff.getName());
// 文件下载成功后,删除FTP服务器上的文件
ftpClient.deleteFile(ff.getName());
if (ftpClient.getReplyCode() == 250) {
logger.info("下载文件删除成功!文件名:" + ff.getName());
} else {
logger.info("下载文件删除失败!文件名:" + ff.getName());
}
} else {
logger.info("文件下载失败!文件名:" + ff.getName());
}
os.close();
}
}
return true;
} catch (Exception e) {
logger.error("失败!远程FTP服务器文件下载处理发生异常。");
return false;
} finally {
// 断开ftp连接
disconnect();
}
}
断开FTP链接和改变工作目录:
/**
* 改变工作目录
*
* @param path
* @throws IOException
*/
public void setWorkDirectory(String path) throws IOException {
// 如果是手动控制可以设置改变工作目录
if (ftpClient != null) {
ftpClient.changeWorkingDirectory(path);
}
}
/**
* 断开连接
*
* @throws IOException
*/
public void disconnect() throws IOException {
if (ftpClient != null && ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
}