java代码操作cmd二次运行新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程序父文件夹的位置即可,不然程序会报以下这个错误

错误: 找不到或无法加载主类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Auspicious5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值