java ftp定时任务进行删除,定时任务,定时下载FTP指定文件

本文介绍了一个通过Apache Commons Net实现的FTP下载文件类,用于定时任务。它处理了FTP登录、目录设置、文件下载及日志记录,包括FTP状态检查和异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值