一个简单的定时调用dos命令的例子
2,
ExecJavac.java 带有异常处理的命令调用例子
3,
GoodWindowsExec.java 执行windows下的命令,命令作为参数输入
StreamGobbler.java
4,
GoodWinRedirect.java 一个调用命令相对复杂的例子,复合命令
StreamRedirectGobbler.java
5,
TestExec.java 测试输入的命令是否能正确run
1 一个在windows平台下定时调用dos命令的简单例子。
==================== SchedulerExec 开始
==============================
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class SchedulerExec {
//调度者
private static Timer timer = new Timer();
//任务
static class ScheduledTask extends TimerTask {
public void
run() {
try {
Process process1, process2;
//1 执行windows的DOS命令:copy c:/a.txt 文件 到 d:/b.txt
process1 = Runtime.getRuntime().exec("cmd /c copy c:/a.txt
d:/b.txt");
if (process1.waitFor() == 0) {//等待copy 完毕, process1.waitFor()
会造成阻塞
//2 执行windows的DOS命令:打开b.txt文件
process2 = Runtime.getRuntime().exec("cmd /c d:/b.txt");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//测试方法
public static void main(String[] args) {
//1 定义时程
11:11:11
Calendar
calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(Calendar.MINUTE, 11);
calendar.set(Calendar.SECOND, 11);
Date time =
calendar.getTime();
//2
新建任务
ScheduledTask scheduledTask = new ScheduledTask();
//3
执行调度
timer.schedule(scheduledTask, time);
System.out.println("A job has been scheduled at " + time);
}
}
==================== SchedulerExec 开始
==============================
2 当本地进程抛出异常 或者错误信息时的 解决方式。
很多时候,由于给定的参数不合法或者其它原因,会造成实际进程的调用出现错误,我们必须对这些错误进行处理,以免进程处于阻塞或者死锁。增强程序的稳定性。
下面是一个windows下调用javac命令的例子,我们都知道 javac后面是需要带参数的 如:java类名等。
这里只调用javac,而不给参数,目的是演示如何处理实际进程给出的错误信息。
==================== ExecJavac 开始
==============================
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ExecJavac {
public static void main(String args[]) {
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("");
while ((line = br.readLine()) != null)
System.out.println(line);
System.out.println("");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch
(Throwable t) {
t.printStackTrace();
}
}
}
==================== ExecJavac 结束
==============================
下面是输出:
==================== 输出开始 ==============================
用法:javac
其中,可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath
指定查找用户类文件的位置
-cp
指定查找用户类文件的位置
-sourcepath
指定查找输入源文件的位置
-bootclasspath
覆盖引导类文件的位置
-extdirs
覆盖安装的扩展目录的位置
-endorseddirs
覆盖签名的标准路径的位置
-d
指定存放生成的类文件的位置
-encoding
指定源文件使用的字符编码
-source
提供与指定版本的源兼容性
-target
生成特定 VM 版本的类文件
-version