Spring+Quartz实现定时从FTP服务器读取文件并存入Oracel数据库

package  com.nstc.safe.action;
 
import  java.io.BufferedReader;
import  java.io.ByteArrayOutputStream;
import  java.io.File;
import  java.io.FileOutputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.io.OutputStream;
import  java.net.SocketException;
import  java.text.DateFormat;
import  java.text.SimpleDateFormat;
import  java.util.ArrayList;
import  java.util.Calendar;
import  java.util.Date;
import  java.util.HashSet;
import  java.util.Iterator;
import  java.util.List;
import  java.util.Set;
import  java.util.UUID;
 
import  javax.servlet.http.HttpServletRequest;
 
import  org.apache.commons.codec.net.URLCodec;
import  org.apache.commons.el.parser.ParseException;
import  org.apache.commons.logging.Log;
import  org.apache.commons.logging.LogFactory;
import  org.apache.commons.net.ftp.FTPClient;
import  org.apache.commons.net.ftp.FTPFile;
import  org.apache.commons.net.ftp.FTPReply;
 
import  com.nstc.safe.Config;
import  com.nstc.safe.domain.SafeErrorFile;
import  com.nstc.safe.domain.SafeReport;
import  com.nstc.safe.server.CommonServer;
import  com.nstc.safe.server.SafeServer;
import  com.nstc.safe.server.ServerLocator;
 
/**
  * <p>
  * Title:外管局错误文件查看
  * </p>
 
  * <p>
  * Description:外管局文件下载Action层
  * </p>
 
  * <p>
  * Company: 北京九恒星科技股份有限公司
  * </p>
 
  * @author zhangyongguang
 
  * @since:2015年9月8日 09:48:34
 
  * @version 1.0
  */
public  class  SAFE_U01_17  extends  ActionSupport {
     private  static  final  Log log = LogFactory.getLog(SAFE_U01_17. class );
     /**
      * 由于Spring配置quartz在调用action的时候,对应server还没有注入到容器中,
      * 所以需要这个action中注入对应server,并且commonServer在spring配置文件中要找得到对应bean,
      * 并在commonServer对应的bean中继承事务控制tx
     
      * commonServer的注入主要是针对work方法(定时任务方法)所用到的与后台交互的代码,
      * */
     private  CommonServer commonServer;
     
     public  CommonServer getCommonServer() {
         return  commonServer;
     }
     public  void  setCommonServer(CommonServer commonServer) {
         this .commonServer = commonServer;
     }
     
     /**
      * 查询错误文件列表
      */
     public  String execute(HttpServletRequest request) {
         
         String errPath = request.getParameter( "errorPath" );
         String start = request.getParameter( "startDate" );
         String end = request.getParameter( "endDate" );
         // 用于下拉选择框的值
         List list = getLocator().getCommonServer().findAll(SafeErrorFile. class );
         // 列表数据
         List list2 = getLocator().getCommonServer().findAll(errPath, start,
                 end, SafeErrorFile. class );
         //把list放入request对象中,在前台遍历
         request.setAttribute( "list" , list);
         request.setAttribute( "list2" , list2);
         return  "page" ;
     }
    /**
     * 查看XML文件内容,显示在前台的页面上
     * @author zhangyonggguang
     * @param request
     * @param list
     * @param id
     * */
     public  String viewXML(HttpServletRequest request) {
         //接收前台传来的文件ID
         String id = request.getParameter( "errId" );
         SafeErrorFile sa =  new  SafeErrorFile();
         //根据ID查询对应的文件
         sa = (SafeErrorFile) getLocator().getCommonServer().findById(id,
                 SafeErrorFile. class );
         //把查询的结果放入list集合中,
         List list =  new  ArrayList();
         list.add(sa);
         //把list放入request对象中,在前台遍历
         request.setAttribute( "list" , list);
         return  "view" ;
     }
     /**
      * 定时任务,定时读取FTP服务器的文件,做入库操作。
      * @author zhangyongguang
      * @exception Exception
      * @date 2015-09-09 14:35:24
      * @return page
      * */
     public  void  work() throws  Exception {
          System.out.println( "自动任务执行" + new  Date());
          //执行查询有多少个路径需要读取的方法,并存入set集合中,遍历set集合,取出有几个路径
          Set set=findPath();
          Iterator it =set.iterator();
          while (it.hasNext()){
              //上传路径为配置文件配置的文件路径,与数据库的发送文件加路径组合而成,
              String st=it.next().toString();
              System.out.println( "SET的值为" +st);
              listRemoteAllFiles(st);
            }
     }
     /**
      * @author zhangyongguang
      * @param  查询FTP服务器有多少路径需要读取
      * */
     public  Set findPath(){
         SafeReport sa= new  SafeReport();
         //定义set集合,去除重复的路径
         Set set= new  HashSet();
         //查询safeReport所有数据
         List list=commonServer.findAll(SafeReport. class );
         for ( int  i= 0 ;i<list.size();i++){
             //把list中的数据强转成safereport对象
             sa=(SafeReport) list.get(i);
             //判断sa.getRep_errmsg()里的值是否为空
             if (sa.getRep_errmsg()!= null &&!sa.getRep_errmsg().equals( "" )){
                 //如果不为空,则存储到set集合中,如果有重复的值,则添加不进去
                 set.add(sa.getRep_errmsg().toString());
             }
         }
         return  set;
     }
     
     /**
      * @author zhangyongguang
      * @param 链接FTP服务器的工具类
      * @param ftpHost FTP主机服务器
      * @param ftpPassword FTP 登录密码
      * @param ftpUserName FTP登录用户名
      * @param ftpPort FTP端口 默认为21
      * @author zhangyongguang
      * @throws Exception 
      */
     public  static  FTPClient getFTPClient()  throws  Exception {
          String ip=Config.getProperty( "IP" );
          int  port=Integer.parseInt(Config.getProperty( "PORT" ));
          String username=Config.getProperty( "USERNAME" );
         
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值