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);   问题补充:可能我刚才说的不够清楚,我再说一次<br />&nbsp;&nbsp;&nbsp; 1、检查数据是否完整<br /><br />&nbsp;&nbsp;&nbsp; 2、如过数据不完整,则等待20分钟后重新拷贝数据(即运行BAT文件)<br /><br />&nbsp;&nbsp;&nbsp; 3、如果数据完整,则直接跳出循环。<br /><br />&nbsp;&nbsp; do{<br />&nbsp;&nbsp;&nbsp; //判断是否完整<br />&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0 ; i &lt; nameLongth.length ; i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nameLongth[i].equals("sunlineTELFile.ctl")){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count_number = 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; //数据不完整,则等到20分钟后重新执行bat文件,等待20分钟需要怎么写?<br />&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; if (count_number!=1){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process = Runtime.getRuntime().exec("D:\etlpath\BillFtp\ftpdown.BAT");&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; } catch (IOException e) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //跳出<br />&nbsp;&nbsp; }while(count_number==1);<br /><br />

解决方案

你可以这样写 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);你也可以这样写引用 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);你都可以试试看
解决方案二:
忘记了,exec()完毕以后,别忘记了shutdown完整的应该是 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. 判断数据是否完整 boolean completeness = checkCompleteness(); //如果不完整 if(!completeness) { return; } //如果完整,执行bat exec(); executror.shutdownNow(); } // 0 表示延时0秒启动,5表示每5秒钟重复一次 }, 0, 5, TimeUnit.SECONDS);
解决方案三:
你可以还一种思路我开一个定时任务每20分钟检查一次如果数据完整,就执行bat命令,关闭定时任务如果数据不完整,本次定时任务执行完,等待下次一次执行 ScheduledThreadPoolExecutor executror = new ScheduledThreadPoolExecutor(1); executror.scheduleAtFixedRate(new Runnable() { public void run() { //To change body of implemented methods use File | Settings | File Templates. // 1. 判断数据是否完整 boolean completeness = checkCompleteness(); //如果不完整 if(!completeness) { return; } //如果完整,执行bat exec() } // 0 表示延时0秒启动,5表示每5秒钟重复一次 }, 0, 5, TimeUnit.SECONDS);此外,你的process = Runtime.getRuntime().exec("D:\etlpath\BillFtp\ftpdown.BAT"); 写的非常有问题,你可以参阅When Runtime.exec() won'的good example
解决方案四:
让线程休眠 20 分钟Thread.sleep(TimeUnit.MINUTES.toMillis(20));

时间: 2024-09-04 15:02:43

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

运行bat时隐藏cmd窗口的方法(bat隐藏窗口 隐藏运行bat文件)_vbs

这里简单的整理下常用方法,方便大家使用.都是通过vbscript的代码.运行bat时隐藏cmd窗口的方法 可以编辑一个vbs脚本,在其中以隐藏窗口运行批处理程序. 复制代码 代码如下: Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c 批处理程序名",vbhide 将上面代码拷贝到记事本中,保存为"runbat.vbs"或者其它的名字(扩展名必须是.vbs),然后点击运行生成的脚本runb

大神进---如何用Java写一个监控的.bat文件,写这个程序的目的是用来监控JasFtp用的。

问题描述 我们公司今天让让我写一个监控程序,要用到java,我们部门用到最多的就是JasFtp来传文件,但是这个程序经常卡死,但是又不会报错,所以让我来写一个他的监控程序,用来监控Log日志就可以了,但是关键的是,我现在还不知道该如何写在各个监控程序,所以来这里问问大神们,给我点代码我参考参考 解决方案 解决方案二:自己顶一下,·····解决方案三:.bat读取log日志做你的业务逻辑处理.解决方案四:没有人么?为什么没有人来关注一下呢解决方案五:你要什么日志呢,若是bat的执行日志text.b

ASP.NET 运行.bat文件的实现方法

  // Create the ProcessInfo object System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe"); psi.UseShellExecute = false; psi.RedirectStandardOutput = true; //psi.RedirectStandardInput = true; psi.RedirectStan

解决Window7下bat文件运行错误的办法

启动cmd,输入命令,net start mssqlserver,结果是:发生系统错误5 拒绝访问 这应该就是没有访问权限了,然后试了试以管理员身份运行cmd,然后执行上面的命令,成功. 接着,在以管理员身份运行bat文件,也成功了. 但是,每次点右键,选择以管理员身份运行,也太繁琐了点了,想到了一个解决办法:创建bat文件的快捷方式,然后编辑属性,将以管理员身份运行打上对勾,这样,每次直接打开快捷方式就可以了.

Linux文件共享(二)——两个独立进程打开同一个文件

如果两个独立进程各自打开了同一文件,则有图3-2中所示的安排.我们假定第一个进程使该文件在文件描述符3上打开,而另一个进程则使此文件在文件描述符4上打开.打开此文件的每一个进程都得到一个文件对象,但对一个给定的文件只有一个v节点表项.每个进程都有自己的文件对象的一个理由:这种安排使每个进程都有它自己对该文件的当前位移量.这种情况不会增加对应的打开文件引用计数,而会增加dentry的引用.          给出了这些数据结构后,现在对前面所述的操作作进一步说明. (1) 在完成每一个write后

如何获取进程运行的时间长度

本文简要介绍了如何使用 GetProcessTimes API 函数来获取某个进程运行了多长时间.GetProcessTimes 函数返回的时间值很容易转换成可读和可利用的信息.参考如下代码段: HANDLE hProcess; FILETIME ftCreation, ftExit, ftKernel, ftUser; GetProcessTimes(hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); 本文例子程序的运

命令行编译-用命令行调用编译程序前必须要调用call prefixvcvars32.bat吗?

问题描述 用命令行调用编译程序前必须要调用call prefixvcvars32.bat吗? 今天写程序需要用命令行调用,但之前需要调用call prefixvcvars32.bat,不知道是不是需要配置下环境,上网查了下,不是太懂啊,哪位大侠给指教啊!!! 解决方案 用bat批处理来做 先调用call prefixvcvars32.bat 然后再调用命令行的cl.exe去编译程序 解决方案二: 用bat批处理来做,再做一个总的bat 先调用call prefixvcvars32.bat 然后再

线程-java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来

问题描述 java调用sqlplus下载数据库文件到本地后,如果用java关闭此进程,大神戳进来 1.用java调用sqlplus,将指定的存储过程下载到本地作为文本文件2.在java读取此本地文件做处理,处理后写1个新的文本文件在本地我将上面2个步骤用2个进程thread1,thread2因为步骤2必须等步骤1结束才能执行,所以我调用thread1.start()thread1.join()以及thread2.start().但是运行结果是每次都只执行出了步骤1,步骤2执行不出来.考虑是否在步

批处理bat文件执行代码结束进程:java.exe

问题描述 我想在window下用批处理bat文件,执行代码结束进程:java.exe我要在php里面执行批处理命令的