天天看点

java定时器处理

最近有个小项目让我实现每天自动生成报文,然后一个财务系统通过FTP可以到我指定的目录下取文件,还实现一个文件不要超过10M等功能,我用了分批处理,但是目前定时的还点问题,贴下代码,哪位同仁有时间帮忙看下

如果解决了,会贴出代码来共享

部分分批处理代码

======================================

 while (rs.next()) {

        sb.append(rs.getString(1)).append("|");

        sb.append(rs.getString(2)).append("|");

        sb.append(rs.getString(3)).append("|");

        sb.append(rs.getString(4)).append("|");

        sb.append(rs.getString(5)).append("|");

        sb.append(rs.getString(6)).append("|");

        sb.append(rs.getString(7)).append("|");

        sb.append(rs.getString(8)).append("|");

        sb.append(rs.getString(9)).append("|");

        sb.append(rs.getString(9)).append("|");

        sb.append(rs.getString(10)).append("|");

        sb.append(rs.getString(11)).append("|");

        sb.append("/n");

        count++;

        if (count % 80000 == 0) { //每次批量插入80000条换一个文件夹

          page++;

          if (Integer.toString(page).length() != 2) { //数字补零

            sb2.append("sjwj_").append(sdate).append("_0").append(page);

          }

          else {

            sb2.append("sjwj_").append(sdate).append("_").append(page);

          }

          sb1.append("d://bankmessagedemo//").append(sb2.toString()).append(".txt");

          BufferedWriter out = new BufferedWriter(new FileWriter(sb1.toString(), true));

          out.write(sb.toString());

          sb.delete(0, sb.length()); //每次先清空一次数据缓存

          sb1.delete(0, sb1.length()); //每次先清空一次报文路径指向缓存

          sb2.delete(0, sb2.length()); //每次先清空一次报文头缓存

          out.flush();

          returnPage(page); //返回page供下面使用,如果没有到80000条,直接需要从1开始

        }

      }

      page = returnPage(page); //得到返回page值

      if (Integer.toString(page).length() != 2) { //数字补零(两种情况,1种COUNG出来的记录数没有80000条,2种是零头)

        if (page == 0) {

          sb2.append("sjwj_").append(sdate).append("_0").append(1);

        }

        else {

          sb2.append("sjwj_").append(sdate).append("_0").append(page+1);

        }

      }

      else {

        sb2.append("sjwj_").append(sdate).append("_").append(page+1);

      }

      sb1.append("d://bankmessagedemo//").append(sb2.toString()).append(".txt");

      BufferedWriter out = new BufferedWriter(new FileWriter(sb1.toString(), true));

      out.write(sb.toString());

      sb1.delete(0, sb1.length()); //每次先清空一次报文路径指向缓存

      sb2.delete(0, sb2.length()); //每次先清空一次报文头缓存

      out.flush();

======================================

有没有更好的方法优化?我总觉得我的这个做法很啰嗦

定时器

======================================

package tf.dt.credit.view;

import java.util.Calendar;

import java.util.Date;

import java.util.TimerTask;

import java.util.Timer;

import tf.dt.credit.view.CreditMessageView;

import tf.dt.credit.database.odbcConnection;

public class TimeManageMessage {

  public static void main(String[] args) throws InterruptedException {

    // Get the Date corresponding to 11:01:00 pm today.

    Calendar calendar = Calendar.getInstance();

    calendar.set(Calendar.HOUR_OF_DAY, 5); //控制时

    calendar.set(Calendar.MINUTE, 1); //控制分

    calendar.set(Calendar.SECOND, 0); //控制秒

    Date time = calendar.getTime();

    Timer timer = new Timer();

    // timer.schedule(new TimeManageMessage.myrun(), time);

    int i = 0;

    while (true) {

     // Thread.sleep(10000l);

      i++;

      timer.schedule(new TimeManageMessage.myrun(), time);

    }

  }

  static class myrun extends TimerTask {

    odbcConnection oc = new odbcConnection();

    String date = oc.getLastDate(); //得到UC账务日期

    public void run() {

      CreditMessageView vmc = new CreditMessageView();

      int oneMessage = vmc.oneMessage("", "1", date); //会计凭证信息文件

      if (oneMessage != 1) {

        System.out.println("dingting:XKJ表中当天记录为空......");

      }

      else {

        System.out.println("dingting:执行成功--会计凭证信息文件......");

      }

      int twoMessage = vmc.twoMessage("", "1", date); //汇率信息文件

      if (twoMessage != 1) {

        System.out.println("dingting:UX表中记录为空.....");

      }

      else {

        System.out.println("dingting:执行成功--汇率信息文件.....");

      }

      int threeMessage = vmc.threeMessage("", "1", date); //全科目余额对账文件

      if (threeMessage != 1) {

        System.out.println("dingting:XKJZD表中当天记录为空......");

      }

      else {

        System.out.println("dingting:执行成功--全科目余额对账文件......");

      }

    }

  }

}

======================================

这个定时器的程序目前还是有点问题,有心人帮忙看看哪里出的问题哈