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;

/**定时处理报文
 *每天凌晨5点自动处理生成报文
 * @author dingting
 * @date 2008-10-20
 */

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:执行成功--全科目余额对账文件......");
      }
    }
  }
}

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值