定时任务,定时下载FTP指定文件

FTP下载类:

package com.log.generateXML.util;>

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.impl.LogFactoryImpl;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import com.log.generateXML.dao.LogTableDao;
import com.log.generateXML.dao.impl.LogTableDaoImpl;
import com.novomss.idc.entity.FtpDownloadLog;


/***
 * 功能描述:FTP下载文件类
 * 定时任务配置applicationContext-idc-uploadTimer.xml
 * 
 */
public class DownLoadXML {

	private LogTableDao lts;
	// 日志记录对象
	private final Log log = LogFactoryImpl.getLog(DownLoadXML.class);

	// Xmls下载日志记录
	private FtpDownloadLog ftpdown ;
	// FTP主机
	private String ftpHost = null;
	// FTP连接端口
	private String port = null;
	private int ftpPort ;
	// FTP连接用户
	private String ftpuser = null;
	// FTP用户密码
	private String ftppasswd = null;
	// FTP下载描述
	private String descript ;
	// FTP上传成功与否状态
	private int status;
	
	// 假定错误值
	/***
	 * 1 FTP登陆状态失败
	 * 2 FTP目录设置错误
	 * 3 FTP工作路径切换失败
	 * 4 要下载的文件不存在
	 */
	private int flag;
	
	/****
	 * FTP下载
	 * @param filename
	 * @return
	 * @throws Exception
	 */
	public boolean ftpDownload(String filename) throws Exception {
		
		// 如果参数为空,直接返回提示
		if(filename==null || filename ==""){
			log.info( "filename is null.");
			return false;
		}
		// 保存文件路径
		String downsavefilePath = FtpConfig.getValue("localDir"); // 本地存储目录
		if(downsavefilePath == null || downsavefilePath.length() == 0){
			log.info("本地存储目录属性未设置!");
			return false;
		}
		File downfilePath = new File(downsavefilePath);
		if(!downfilePath.exists()&&!downfilePath.isDirectory()){
			log.info("本地下载文件保存路径不存在!");
			return false;
		}
		
		// 下载文件名
		File file = new File(filename);
		
		// 实例化FTP客户端对象
		FTPClient ftp = new FTPClient();
		// 服务器连接状态
		int reply = 0;
		try {
			
			// 如果FTP未连接则连接服务器
			if (!ftp.isConnected()) {
				// 设置连接属性
				ftpHost = FtpConfig.getValue("ftpHost");	
				port = FtpConfig.getValue("ftpPort");	
				ftpPort = Integer.parseInt(port);
				// 连接服务器
				ftp.connect(ftpHost,ftpPort);
				log.info("连接ftp服务器:" + ftpHost);
				// 连接服务器状态
				reply = ftp.getReplyCode();
				log.info("连接ftp服务器reply:" + reply);
			}
			// 登陆服务器,判断是否登陆成功
			ftpuser = FtpConfig.getValue("userName");
			ftppasswd = FtpConfig.getValue("password");
			boolean isLogin = ftp.login(ftpuser,ftppasswd);	//	登陆FTP用户名、密码
			//log.info("登录ftp服务器isLogin:" + isLogin);
			if(!isLogin){
				log.info("登陆FTP失败");
				flag = 1;
			}else{ log.info("登陆FTP已成功"); }
			
			// 获取FTP工作目录
			String workDir = FtpConfig.getValue("workDir");
			if (workDir == null){
				log.info("workdir is null.");
				flag = 2;
			}
			
			// 上传目录
			String uploadDir = "";
			// 拼接FTP工作路径
			uploadDir += "" + workDir;
			// 切换当前工作路径,更改FTP连接位置
			boolean change = ftp.changeWorkingDirectory(uploadDir);
			if(change == false){
				log.info("changeWorkingDirectory: “"+uploadDir+"” failed.");
				flag=3;
			}
			log.info("切换工作路径状态:"+change);
			
			// 获得下载开始时间
			long starTime = System.currentTimeMillis();
			
			// 初始化文件名,获得当前目录文件
			String savedFileName = "";
			savedFileName = file.getName();
			if(savedFileName==null || savedFileName.length()==0){
				log.info("get file “"+savedFileName+"” failed.");
				flag=4;
			}
			
			/*//验证服务器端文件是否存在
			FileOutputStream fos = new FileOutputStream(savedFileName);
			if(ftp.retrieveFile(filename, fos)){
				log.info("服务器端文件已验证存在:");
			}else {
				flag=4;
				log.info("要下载的文件服务器端不存在:");
			}*/
			
			// 文件流保存路径
			File tempFile = new File(downsavefilePath+"temp_"+savedFileName);
			File destFile = new File(downsavefilePath+savedFileName);
			
			//输出流,输出文件内容到临时文件
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(tempFile));
			
			// 设置文件类型
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			ftp.setBufferSize(4 * 1048);
			ftp.setControlEncoding("GB2312");
			ftp.enterLocalPassiveMode();
			
			// 下载XML文件,从服务器检索指定文件savedFileName,并写入BufferedOutputStream
			boolean download = ftp.retrieveFile(savedFileName, bos);
			
			// 当前FTP状态
			reply = ftp.getReplyCode();
			bos.close();
			log.info("文件下载:" + download + "时间为:"+ (System.currentTimeMillis() - starTime) + "ms");
			
			//保存文件到指定目标目录
			if(download){
				if(destFile.exists())
					destFile.delete();
				tempFile.renameTo(destFile);
				status = 1;
				descript = "文件下载成功!";
				log.info("文件下载成功!");
			}else {
				tempFile.delete();
				status = 0;
				if(flag==1) descript="FTP登陆状态失败";
				if(flag==2) descript="FTP目录设置错误";
				if(flag==3) descript="FTP工作路径切换失败";
				if(flag==4) descript="要下载的文件不存在";
				log.info( "download: “"+destFile.getPath()+"” faild." );
			}
			
			//写入成功日志并加入告警
			
			lts = new LogTableDaoImpl();
			ftpdown = new FtpDownloadLog();
			
			ftpdown.setFilename(filename);
			ftpdown.setFtphost(ftpHost);
			ftpdown.setFtpport(Long.valueOf(port));
			ftpdown.setFtpuser(ftpuser);
			ftpdown.setFtppasswd(ftppasswd);
			ftpdown.setLocaldir(downsavefilePath);
			ftpdown.setWorkdir(workDir);
			ftpdown.setDescript(descript);
			ftpdown.setStatus(Long.valueOf(status));
			
			boolean flag = lts.saveFtpDownLog(ftpdown);
			if(flag)
				log.info("写入日志成功!");
			
			log.info("接收下载文件的参数:"+ftpdown.getFilename());
			
			//下载失败返回false
			if(status==0)
				return false;
			// 判断FTP连接性
			if (!FTPReply.isPositiveCompletion(reply)) {
				System.err.println("FTP server reply." + reply);
			}
			// 退出登陆
			ftp.logout();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e.getMessage());
		} finally {
			ftp.disconnect();	// 释放FTP连接
		}
		return true;
	}
	
	/*public static void main(String[] args) throws Exception{
		
		DownLoadXML dlx = new DownLoadXML();
		String filename =  "20121119999.xml-";
		boolean a = dlx.ftpDownload(filename);
		System.out.println("返回:"+a);
	}*/
	
	public LogTableDao getLts() {
		return lts;
	}
	public void setLts(LogTableDao lts) {
		this.lts = lts;
	}
	
}

定时任务配置文件:





	
	
		
	
	
	
	
	

	
	
		
	

	
	 
		
		 	
				
				
				
			
		
	
	
	        
		        
		
			
			 0 10 0 * * ?
		
	
	
	
		        
		
		  
		run
	
	
	
		        
		
		  
		down
	
	
	
	        
		        
		
			
			 0 0 2 * * ?
		
	
	
	
	        
		
		
			 0 0 1 1 * ?
		
	
	
	
		
		operatorData 
	
	

你可能感兴趣的:(定时任务,定时下载FTP指定文件)