定时从ftp上下载txt文件到数据库中

第一步:编写java代码

@Service("BaseDataTask")
public class BaseDataTask {
    private static Logger logger = Logger.getLogger(BaseDataTask.class.getName());

    @Resource
    private TAreaMapper areaMapper;

    private String ftpIP  = "";// ftp地址
    private String userName = "";// 用户名
    private String userPwd = ""; // 密码
    private int ftpPort = 21;// ftp端口号
    FTPClient fc = null;//ftp对象
    BufferedReader bufferedReader = null;
    InputStream fget = null;
    String fileName="";//文件名


    public void BaseDataTask() {
        downloadArea();//区域
    }

    
    public boolean  downloadArea() {
        boolean success = false;
        try {
            SimpleDateFormat fileDate = new SimpleDateFormat("yyyyMMdd");
            String nowDate = fileDate.format(new Date());//当前日期
            String newName="area_"+nowDate+".txt";//文件名
            int reply;
            fc = new FTPClient();// ftp客户端对象
            fc.connect(ftpIP,ftpPort);// 连接ftp服务器
            fc.login(userName, userPwd);// 登录ftp服务器
            //判断登陆是否成功
            reply = fc.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                fc.disconnect();
            }
            FTPFile[] fs = fc.listFiles();//ftp下的所有文件名称
            for (FTPFile ftpfile : fs) { //遍历所有文件
                fileName = ftpfile.getName();
                if (fileName.equals(newName)) {
                    logger.info("********" + nowDate + ":开始下载区域信息数据!");
                    //logger.info("------------数据库操作---------");
                    String userID = "admin";
                    String read;//每一行数据
                    int lineNo = 1;//行数
                    String areaname = "";//区域名称
                    String fareaname = "";//所属上级区域名
                    TArea area = new TArea();
                    fget = fc.retrieveFileStream(newName);// 读取ftp远程文件数据
                    bufferedReader = new BufferedReader(new InputStreamReader(fget, "UTF-8"));
                    bufferedReader.readLine();//先执行一次,除去标题的内容
                    lineNo++;
                    while ((read = bufferedReader.readLine()) != null) {
			//这个里面就写数据库操作步骤
                        lineNo++;
                    }
                    logger.info("********" + nowDate + ":结束下载区域信息数据!");
                    success=true;
                }
                success = false;
            }
            // 退出登陆
            fc.logout();
        } catch (IOException e) {
            try {
                bufferedReader.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        return success;

    }

}

第二步:在spring配置文件头中添加命名空间及描述

xml代码:

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:task="http://www.springframework.org/schema/task"
  http://www.springframework.org/schema/task
  http://www.springframework.org/schema/task/spring-task.xsd">

第三步:在spring配置文件中配置定时任务

xml代码:

<task:scheduler id="myScheduler" pool-size="5" />
<task:scheduled-tasks scheduler="myScheduler">
   <task:scheduled ref="BaseDataTask" method="BaseDataTask" cron="0 * 22 * * ?"/>
</task:scheduled-tasks>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值