概述
需要注意的有两点:
* 必须处理InputStream和ErrorStream,否则主线程会阻塞。这里我用了SequenceInputStream合并两条输入流。
* 字节流转字符流时要指定正确的编码,否则会乱码。
直接上代码了:
import org.junit.Test;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* 命令行辅助工具
* @author jzhung
*/
public class Commander {
@Test
public void test() {
List cmds = new ArrayList<>();
cmds.add("ping 127.0.0.1");
cmds.add("ipconfig /all");
cmds.add("adb devices");
cmds.add("adb shell ls /system");
cmds.add("adb shell pm list packages");
try {
for (int i = 0; i < cmds.size(); i++) {
execute(cmds.get(i));
System.out.println("-----------------------------------------------------");
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void execute(String cmd) throws IOException {
Process process = Runtime.getRuntime().exec(cmd);
InputStream inStream = process.getInputStream();
InputStream errStream = process.getErrorStream();
SequenceInputStream sequenceIs = new SequenceInputStream(inStream, errStream);
BufferedInputStream bufStream = new BufferedInputStream(sequenceIs);
Reader reader = new InputStreamReader(bufStream, getDefaultEncoding());
BufferedReader bufReader = new BufferedReader(reader);
String line;
while ((line = bufReader.readLine()) != null) {
System.out.println(line);
}
inStream.close();
errStream.close();
process.destroy();
}
public static String getDefaultEncoding() {
if (getOS().trim().toLowerCase().startsWith("win")) {
return "GBK";
} else {
return "UTF-8";
}
}
public static String getOS() {
String os = System.getProperty("os.name");
System.out.println(os);
return os;
}
}
最后
以上就是机智服饰为你收集整理的java执行cmd命令超时,Java调用CMD执行命令的全部内容,希望文章能够帮你解决java执行cmd命令超时,Java调用CMD执行命令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复