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 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭