*、在实际的项目开发中有这样一个需求,为了进行保密操作,在外置的服务器上搭建一个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; }