Ftp上传与下载

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

猜你喜欢

转载自lbovinl.iteye.com/blog/2412821
今日推荐