使用Java代码在Windows上的CMD中执行命令

时间:2017-02-18 18:26:09

标签: java windows cmd

我想编写一个可以在Windows CMD中执行命令的Java代码。

我查看了网站,了解了如何发送和处理单个请求。例如,创建新的Process并执行(“cmd / c dir”),然后使用输入流我可以得到显示的答案。

如何打开cmd进程并让用户输入cmd命令?

例如,我打开应用程序并直接打开cmd进程,然后用户可以输入“dir”并获取输出。

输入“cd ../../”后 然后再次输入“dir”并获得带有新路径包含的输出。

如果可以执行那么该怎么办?或者为了执行这个需要每次打开一个新进程并执行(“cmd / c some_reqests”)?

2 个答案:

答案 0 :(得分:0)

试试这个

    Process p = Runtime.getRuntime().exec("ps -ef");

http://alvinalexander.com/java/edu/pj/pj010016

找到了它

答案 1 :(得分:0)

不错的问题,您实际上可以将cmd称为新流程,并使用标准输入和标准输出来处理数据。

棘手的部分是知道命令流何时结束。

为此,我在命令(dir && echo _end_)之后使用了一个字符串回显。

在实践中,我认为最好只为每项任务启动一个流程。

public class RunCMD {

    public static void main(String[] args) {
        try {
            Process exec = Runtime.getRuntime().exec("cmd");
            OutputStream outputStream = exec.getOutputStream();
            InputStream inputStream = exec.getInputStream();
            PrintStream printStream = new PrintStream(outputStream);
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
            printStream.println("chcp 65001");
            printStream.flush();
            printStream.println("dir && echo _end_");
            printStream.flush();


            for(String line=reader.readLine();line!=null;line=reader.readLine()){
                System.out.println(line);
                if(line.equals("_end_")){
                    break;
                }
            }

            printStream.println("exit");
            printStream.flush();

            for(String line=reader.readLine();line!=null;line=reader.readLine()){
                System.out.println(line);
            }

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}