*、在实际的项目开发中有这样一个需求,为了进行保密操作,在外置的服务器上搭建一个FTP服务端,然后内在的保密服务器上对该服务器进行ftp方式的主动数据抓取操作,and so on~
----欢迎拍砖,欢迎大家不吝赐教---
(~ ̄▽ ̄)~
*、登录(参数简单的封装了一下)
public static FTPClient getFtpConn(JBConfig jbConfig) {
if(!ftpClient.isConnected()) {
String remoteIP = "";
String userName = "";
String userPwd = "";
try {
remoteIP = jbConfig.getRemoteIP();
userName = jbConfig.getUserName();
userPwd = jbConfig.getUserPwd();
ftpClient.connect(remoteIP);
boolean f = ftpClient.login(userName , userPwd);
if(f) {
logger.warn("IP:"+remoteIP+",用户名:"+userName+"的数据库连接成功!");
}
}catch(IOException e) {
logger.warn("IP:"+remoteIP+",用户名:"+userName+"的数据库连接失败!"+e);
}
}
return ftpClient;
}
*、下载(内部工具函数自己随意写哈,O(∩_∩)O哈哈~)
/**
* FTP下载单个文件测试
* @param remoteFileName 远程环境的绝对路径
* @param aimDir 本地下载后的文件所在的根目录
*/
public static String ftpDownFile(JBConfig jbConfig , String remoteFileName , String aimDir) {
getFtpConn(jbConfig);
FileOutputStream fos = null;
String fileName = "";//远程文件的文件名称
String localFileName = "";//本地要下载的文件位置
if(!FileTool.isExist(aimDir)) {
System.exit(0);//目录文件创建失败就退出!
}
try {
fileName = FileTool.getFileName(remoteFileName);//得到远程文件的文件名
if(aimDir.contains("/")) {
localFileName = aimDir+"/"+fileName;
}else if(aimDir.contains("\\")) {
localFileName = aimDir+"\\"+fileName;
}
logger.warn("文件名提取结果是:"+fileName);
logger.warn("下载到本地的目录地址路径是:"+localFileName);
fos = new FileOutputStream(localFileName);
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
logger.warn(remoteFileName+":下载中!!!");
ftpClient.enterLocalPassiveMode();//关键点
boolean b = ftpClient.retrieveFile(new String(remoteFileName.getBytes("UTF-8"),"ISO-8859-1"), fos);//解决中文路径的问题
if(b) {
logger.warn(remoteFileName+":下载成功!!!");
}else {
logger.warn(remoteFileName+":下载失败!!!");
return null;
}
} catch (IOException e) {
logger.warn("下载时FTP客户端出错!"+e);
} finally {
IOUtils.closeQuietly(fos);
try {
ftpClient.disconnect();
} catch (IOException e) {
logger.warn("下载时关闭FTP连接发生异常!"+e);
}
}
return localFileName;
}
*、上传
/**
* FTP上传单个文件
*/
public static boolean ftpUpFile(JBConfig jbConfig , String localFileName , String aimfileName) {
getFtpConn(jbConfig);
FileInputStream fis = null;
try {
//本地文件路径
File srcFile = new File(localFileName);
fis = new FileInputStream(srcFile);
//设置上传目录
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
logger.warn(localFileName+":上传中!!!");
ftpClient.enterLocalPassiveMode();
boolean b = ftpClient.storeFile(aimfileName, fis);
if(b) {
logger.warn(localFileName+":上传成功!!!");
}else {
logger.warn(localFileName+":上传失败!!!");
}
} catch (IOException e) {
logger.warn("上传时FTP客户端出错!"+e);
return false;
} finally {
IOUtils.closeQuietly(fis);
try {
ftpClient.disconnect();
} catch (IOException e) {
logger.warn("上传时关闭FTP连接发生异常!"+e);
}
}
return true;
}