最近在学习DOS命令,觉得应该做一个客户端来执行DOS命令,恰好学习过java,就使用java执行DOS命令,
在网上查找了许久,发现大同小异,不过还是要感谢大家的分享。
关于怎么运用,我总结了一下几点:
关键点
1.java下怎么执行DOS命令
Process process = Runtime.getRuntime().exec("cmd /c dir c:");
2.DOS下的输出通过什么获取
InputStream in=process.getInputStream(); //获取DOS下的输出
3.读取
//先储存再输出
//int temp,i=0;
//byte b[]=new byte[10240];
//while((temp=in.read())!=-1){
//b[i]=(byte)temp;
//i++;
//}
//System.out.println(new String(b));
//一边读一边输出
Scanner scan=new Scanner(in);
while(scan.hasNextLine())
System.out.println(scan.nextLine());
scan.close();
经过几次尝试,发现读取DOS下输出使用Scanner比较方便
下面是一段完整的代码
package com.ly.dos;
// 尽管解决了显示输出的问题,但是byte开辟空间大小的问题尚未解决
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class TestExec {
Process process;
public static void main(String[] args) {
TestExec test = new TestExec();
//String open = "cmd.exe /c start call tree /f";
String open = "cmd.exe /c dir f:";
if (args.length == 0) {
test.exec(open);
}
}
public void sendParams(String params) {
}
public void exec(String cmd) {
Runtime run = Runtime.getRuntime();
try {
process= run.exec(cmd);
InputStream in=process.getInputStream(); //获取DOS下的输出
int temp,i=0;
byte b[]=new byte[10240];
while((temp=in.read())!=-1){
b[i]=(byte)temp;
i++;
}
System.out.println(new String(b));
} catch (IOException e) {
e.printStackTrace();
}
}
}