我想编写一个可以在Windows CMD中执行命令的Java代码。
我查看了网站,了解了如何发送和处理单个请求。例如,创建新的Process并执行(“cmd / c dir”),然后使用输入流我可以得到显示的答案。
如何打开cmd进程并让用户输入cmd命令?
例如,我打开应用程序并直接打开cmd进程,然后用户可以输入“dir”并获取输出。
输入“cd ../../”后 然后再次输入“dir”并获得带有新路径包含的输出。
如果可以执行那么该怎么办?或者为了执行这个需要每次打开一个新进程并执行(“cmd / c some_reqests”)?
答案 0 :(得分:0)
试试这个
Process p = Runtime.getRuntime().exec("ps -ef");
找到了它
答案 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();
}
}
}