lockmar 2010-12-05 15:15
浏览 380
已采纳

java循环调用进程运行bat文件,每调用一次进程前进行等待20分钟

    小弟要实现一下的功能:

    1、检查数据是否完整

    2、进行拷贝数据

    3、如果数据不完整,则等待20分钟后重新拷贝数据

    4、检查数据是否完整,如果完整,则跳出循环

    代码如下,请教各位大师,怎么实现

   do{
    //判断是否完整
     for(int i = 0 ; i < nameLongth.length ; i++){
      if(nameLongth[i].equals("sunlineTELFile.ctl")){
       count_number = 1;
      }   
     }
     //数据不完整,则等到20分钟后重新执行bat文件,等待20分钟需要怎么写?
     
     if (count_number!=1){
      try {
      process = Runtime.getRuntime().exec("D:\\etlpath\\BillFtp\\ftpdown.BAT");     
     } catch (IOException e) {
      e.printStackTrace();
     }
     }
           //跳出
   }while(count_number==1);

  

  • 写回答

4条回答 默认 最新

  • beneo 2010-12-05 18:01
    关注

    你可以这样写
    [code="java"]
    do {
    //判断是否完整

            boolean completeness = true;
            for (int i = 0; i < nameLongth.length; i++) {
                if (!nameLongth[i].equals("sunlineTELFile.ctl")) {
                    completeness = false;
                    break;
                }
            }
            //数据不完整,则等到20分钟后重新执行bat文件,等待20分钟需要怎么写?
            Thread.sleep(TimeUnit.MINUTES.toMillis(20));
    
    
            if (completeness) {
                try {
                    //你这种写法有可能造成没有执行,解决办法看[url=http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1]这帖子[/url]
                    process = Runtime.getRuntime().exec("D:\\etlpath\\BillFtp\\ftpdown.BAT");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //跳出
        } while (!completeness);
    

    [/code]

    你也可以这样写
    [quote]
    final ScheduledThreadPoolExecutor executror = new ScheduledThreadPoolExecutor(1);
    executror.scheduleAtFixedRate(new Runnable() {

            public void run() {
                //To change body of implemented methods use File | Settings | File Templates.
                // 1. 判断数据是否完整
                for (int i = 0; i < nameLongth.length; i++) {
                    if (!nameLongth[i].equals("sunlineTELFile.ctl")) {
                        return;
                    }
                }
    
                try {
                    process = Runtime.getRuntime().exec("D:\\etlpath\\BillFtp\\ftpdown.BAT");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                executror.shutdownNow();
            }
            // 0 表示延时0秒启动,5表示每5秒钟重复一次
        }, 0, 20, TimeUnit.MINUTES);
    

    [/quote]
    你都可以试试看

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题