java代码操作cmd二次运行新java程序
2017-04-04 22:30
183 查看
内容如标题。
我想很多java程序员在初学java的时候都使用过cmd编译运行java程序。
我这篇博客的目的就是在java代码中调用cmd方法去编译运行新的java程序。
其实java中已经给我们提供了操作cmd的方法了,如下:
这个方法有很多用途,可以打开系统程序,如记事本等等。
首先使用 cmd /?方式查看java给我们提供的帮助信息
编译运行后查看输出结果(这里只显示部分结果):
这里最关键的是这两句话:
/C 执行字符串指定的命令然后终止
/K 执行字符串指定的命令但保留
接下来我开始演示使用java代码操作cmd运行新的java程序
首先,编写一个新的java程序(我的类名 Text),路径自己选
接下来使用cmd去编译程序,这里需要你把程序完整位置写出来
1.main(操作cmd,使用Process方式获取操作结果)
2.处理操作结果,使用process后系统会已流的方式返回结果,而我们需要做的就是处理这些流。这里我有些复用代码了XXX
3.查看编译结果结果
因为是编译,所以编译成功后不好输出结果。
4.开始运行
运行时候就是把上面main里的
String cmd改变一下。如下:
接下来就是结果:
这里可以看到,Text程序在运行。线程也在输出结果。
问题:
这里就是你需要去更改你的环境变量,环境变量里只需要添加你新建的java程序父文件夹的位置即可,不然程序会报以下这个错误
错误: 找不到或无法加载主类
我想很多java程序员在初学java的时候都使用过cmd编译运行java程序。
我这篇博客的目的就是在java代码中调用cmd方法去编译运行新的java程序。
其实java中已经给我们提供了操作cmd的方法了,如下:
String cmd=null; //cmd命令 Runtime.getRuntime().exec(cmd);
这个方法有很多用途,可以打开系统程序,如记事本等等。
首先使用 cmd /?方式查看java给我们提供的帮助信息
Runtime.getRuntime().exec("cmd /?");
编译运行后查看输出结果(这里只显示部分结果):
启动 Windows 命令解释器的一个新实例 CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF] [[/S] [/C | /K] string] /C 执行字符串指定的命令然后终止 /K 执行字符串指定的命令但保留 /S 修改 /C 或 /K 之后的字符串处理(见下) /Q 关闭回显 /D 禁止从注册表执行 AutoRun 命令(见下) /A 使向管道或文件的内部命令输出成为 ANSI /U 使向管道或文件的内部命令输出成为 Unicode /T:fg 设置前台/背景颜色(详细信息见 COLOR /?) /E:ON 启用命令扩展(见下) /E:OFF 禁用命令扩展(见下) /F:ON 启用文件和目录名完成字符(见下) /F:OFF 禁用文件和目录名完成字符(见下) /V:ON 使用 ! 作为分隔符启用延迟的环境变量 扩展。例如,/V:ON 会允许 !var! 在执行时 扩展变量 var。var 语法会在输入时 扩展变量,这与在一个 FOR 循环内不同。 /V:OFF 禁用延迟的环境扩展。
这里最关键的是这两句话:
/C 执行字符串指定的命令然后终止
/K 执行字符串指定的命令但保留
接下来我开始演示使用java代码操作cmd运行新的java程序
首先,编写一个新的java程序(我的类名 Text),路径自己选
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Text { private int i=0; public Text(){ Timer timer =new Timer(); TimerTask task = new TimerTask() { @Override public void run() { i++; System.out.println(i); } }; timer.schedule(task, new Date(), 1000); } public static void main(String[] args) { new Text(); } }
接下来使用cmd去编译程序,这里需要你把程序完整位置写出来
1.main(操作cmd,使用Process方式获取操作结果)
public CmdText() { try { //cmd值:cmd /c javac f:/AText/Text.java(下面字符串好像csdn上显示不了,拿出来单写) String cmd="cmd /c javac f:/AText/Text.java"; Process p = Runtime.getRuntime().exec(cmd); getSuccess(p); getDefault(p); } catch (Exception e) { e.printStackTrace(); } }
2.处理操作结果,使用process后系统会已流的方式返回结果,而我们需要做的就是处理这些流。这里我有些复用代码了XXX
// 处理运行正常 private void getSuccess(Process p) throws IOException { sbr = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = null; while ((line = sbr.readLine()) != null) { System.out.println(line); } } // 处理运行失败 private void getDefault(Process p) throws IOException { dbr = new BufferedReader(new InputStreamReader(p.getErrorStream())); String line = null; while ((line = dbr.readLine()) != null) { System.out.println(line); } }
3.查看编译结果结果
因为是编译,所以编译成功后不好输出结果。
4.开始运行
运行时候就是把上面main里的
String cmd改变一下。如下:
try { //cmd值:cmd /c javac f:/AText/Text.java(下面字符串好像csdn上显示不了,拿出来单写) String cmd = "cmd /c java Text"; Process p = Runtime.getRuntime().exec(cmd); getSuccess(p); getDefault(p); } catch (Exception e) { e.printStackTrace(); }
接下来就是结果:
这里可以看到,Text程序在运行。线程也在输出结果。
问题:
这里就是你需要去更改你的环境变量,环境变量里只需要添加你新建的java程序父文件夹的位置即可,不然程序会报以下这个错误
错误: 找不到或无法加载主类
相关文章推荐
- JAVA操作SSL协议,通过Socket访问Https的程序代码例子
- BlackBerry手机上面开发Java程序,如果才能让代码运行效率高,占用系统资源少?
- 该文件没有程序与之关联来运行该操作。请在控制面板的目录选项中创建关联 解决代码
- java代码改了之后运行仍然是原程序
- 在AWS EMR上运行Map Reduce的Java示例程序 及 操作小计
- 关于计算Java程序运行时间 及Java代码--JUnit
- [编写高质量代码:改善java程序的151个建议]建议72 生成字列表后不要再操作原列表
- 该文件没有程序与之关联来运行该操作。请在控制面板的目录选项中创建关联 解决代码
- 在Eclipse中运行JAVA代码远程操作HBase的示例
- JAVA 测试程序代码运行时间
- Java程序运行时间计时代码
- [编写高质量代码:改善java程序的151个建议]建议57 推荐在复杂字符串操作中使用正则表达式
- 从命令行及java程序运行MyBatis Generator 1.3.x自动生成MyBatis 3.x代码
- 在自己的java代码中编译并运行程序
- 【Java程序运行超时后退出或进行其他操作的实现】
- java web 程序---javabean代码,出现错误。奇怪,无法解释的运行问题
- 【Java程序运行超时后退出或进行其他操作的实现】
- iOS 中 当程序进入后台 但是程序员希望在程序进入后台的时候还可以运行一段代码时候可以做以下的操作
- 用BSF + Beanshell使Java程序能够运行字符串形式的代码(转载)