我们看到,有一个ExcelDownloadTask 任务,做的工作是等人ftp并下载指定目录下的所有文件到本地.
我们还有一个类DoExcelDownload 提供2个方法,分别负责启动ExcelDownloadTask 和停止ExcelDownloadTask .
现在如果放假个文件到ftp指定目录下,启动任务并在20毫秒之后停止任务,我们发现输出结果是:
>>>>>>>>>>>>>>>>>main
>>>>>>>>>>>>>>>>start task
>>>>>>>>>>>>>>>>>run
>>>>>>>>>>>>>>>>>end task
get file:1.txt
get file:2.txt
get file:3.txt
get file:4.txt
get file:5.txt
get file:6.txt
即一触发task,time停了也不会影响最后一次任务.
package com.ssc.cm.datamart.excelDownload;
import java.util.Timer;
import org.apache.log4j.Logger;
public class DoExcelDownload {
private static final Logger LOGGER = Logger.getLogger(DoExcelDownload.class);
private static Timer time = null;
public static void main(String[] args) throws InterruptedException {
LOGGER.info(">>>>>>>>>>>>>>>>>main");
start();
Thread.sleep(20);
cancel();
}
public static void start(){
LOGGER.info(">>>>>>>>>>>>>>>>start task");
time = new Timer();
time.schedule(new ExcelDownloadTask(), 0,60000L);
}
public static void cancel(){
LOGGER.info(">>>>>>>>>>>>>>>>>end task");
if(time!=null){
time.cancel();
}
}
}
package com.ssc.cm.datamart.excelDownload;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.log4j.Logger;
import com.enterprisedt.net.ftp.FTPClient;
import com.enterprisedt.net.ftp.FTPException;
import com.enterprisedt.net.ftp.FTPMessageCollector;
public class ExcelDownloadTask extends TimerTask{
private static final Logger LOGGER = Logger.getLogger(ExcelDownloadTask.class);
@Override
public void run() {
LOGGER.info(">>>>>>>>>>>>>>>>>run");
File file = new File("");
String localFolder = file.getAbsolutePath()+"\\newfiles\\";
FTPClient ftp = null;
try {
ftp = new FTPClient();
FTPMessageCollector listener = new FTPMessageCollector();
ftp.setMessageListener(listener);
ftp.connect();
ftp.login(user, userName);
String[] files;
files = ftp.dir();
Set<File> localFiles = new HashSet<File>();
if (files.length > 0) {
for(String fileName : files){
LOGGER.info("get file:"+fileName);
String localFile = localFolder + fileName.substring(0,fileName.lastIndexOf("."))+ (new Date().getTime())+fileName.substring(fileName.lastIndexOf("."));
ftp.get(localFile, fileName);
localFiles.add(new File(localFile));
ftp.delete(fileName);
}
}
ftp.quit();
} catch (IOException e) {
LOGGER.info(e.getMessage());
} catch (FTPException e) {
LOGGER.info(e.getMessage());
}finally {
if (ftp.connected()) {
try {
ftp.quit();
} catch (IOException e) {
e.printStackTrace();
} catch (FTPException e) {
e.printStackTrace();
}
}
}
}
}