java执行cmd命令超时,Java调用CMD执行命令-程序员宅基地

技术标签: java执行cmd命令超时  

需要注意的有两点:

* 必须处理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;

}

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42549154/article/details/115173903

智能推荐

Regular Expression Extractor (转)-程序员宅基地

文章浏览阅读163次。Regular Expression Extractor是JMeter中的另一个概念—Post-processor,它的作用是得到HTTP响应后,对结果(比如一个html标签页面的内容或json输出数据等)进行处理,通过regular expression抽取字符值,存成一个变量给后面的Sampler使用。例如在Click Table(afterSelectTable_ajax..._groovy获取regular expression extractor

设置socket connect超时时间的几种方法-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏28次。BSD内核:TCP_CONNECTIONTIMEOUTlinux内核:TCP_SYNCNT

AveragePooling1D和GlobalAveragePooling1D的区别-程序员宅基地

文章浏览阅读7.5k次,点赞3次,收藏11次。_globalaveragepooling1d

c 算后端开发语言吗,C语言属于什么语言_后端开发-程序员宅基地

文章浏览阅读1.8k次。算术运算符、赋值运算符和关系运算符的优先级是什么?_后端开发优先级排序为:算术运算符 > 关系运算符 > 赋值运算。算术运算符有*、/、%、+、-;关系运算符有、<=、>= 、==、!=;赋值运算符有=、+=、-=、*=、/=、%=、>>=、<<=、&=、|=、^=。C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言..._c语言开发后端

Three.js杂记(十二)—— VR全景效果制作·中_js vr全景看车-程序员宅基地

文章浏览阅读834次。文章目录序正文开始引入threeJs材料收集实现原理实现步骤基础的全景完成完整Vue代码总结序在web的前端发展过程中,对于视觉化的要求已经越来越高有关于VR全景的效果也同样可以在网页中实现了,不用戴上VR设备,你也可以在网页上体会一把“身临其境”的感觉全景视觉之前的我ThreeJS系列博客中也曾经写过一篇关于如何制作全景效果的文章,不过只有上半部分的素材采集**(虽然这很重要)**这是我ThreeJs系列地址,如果对页面3D感兴趣的同学可以过去学习:https:_js vr全景看车

折腾Redis之字符串_redisson list中取出的对象是字符串-程序员宅基地

文章浏览阅读3.8k次,点赞19次,收藏5次。 字符串是Redis五种基本数据类型中的基础。同时也是我们在学习编程中接触最多的一种数据类型。本文将从使用、源码、编码三个部分讲解此数据类型在Redis中的使用。字符串 string是Redis中最简单的数据结构。Redis中所有的数据结构都是以唯一的key字符串作为名称,根据此key获取value,差异仅在于value的数据结构不同。string使用非常广泛,最常_redisson list中取出的对象是字符串

随便推点

loadrunner如何测试sqlserver数据库性能思路分享_loadrunner odbc性能-程序员宅基地

文章浏览阅读1.1k次。本次通过loadrunner录制Sql Server介绍一下如何测试一个sql语句或存储过程的执行性能。主要分如下几个步骤完成: 第一步、测试准备第二步、配置ODBC数据源第三步、录制SQL语句在Sql Server查询分析器中的运行过程 第四步、优化录制脚本,设置事务 第五步、改变查询数量级查看SQL语句的性能第六步、在controller中运行脚本_loadrunner odbc性能

Flutter 异常集(持续更新...)_yourandroidsdklocation-程序员宅基地

文章浏览阅读1k次。异常情况:使用 flutter doctor 可以识别手机设备,但是 Adroid Studio 不识别。解决:使用命令行,设置 Flutter 配置下的 Android Sdk 目录。flutter config --android-sdk /yourAndroidSDKLocation或者在 AS 界面 Flile -&amp;gt; Project Structour 下设置 P..._yourandroidsdklocation

常见前端UI框架_h+ui layui easyui-程序员宅基地

文章浏览阅读1.6k次。常见前端UI框架1.Layui官方网址:http://www.layui.com/Layui是一款采用自身模块规范编写的国产前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用。从核心代码到API的每一处细节都经过精心雕琢,非常适合界面的快速开发。,从核心代码到API的每一处细节都经过精心雕琢,非常适合界面的快速开发。Layui还很年轻,首个版本发布于20..._h+ui layui easyui

for循环与setTimeout_settimeout for循环-程序员宅基地

文章浏览阅读1.7k次。1.只有for循环时for (var i = 0; i < 5; i++) {console.log(i);}运行结果为0,1,2,3,4 ,这是大家都知道的2.在for循环中添加setTimeoutfor (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i); },i*1000);_settimeout for循环

【Java设计模式05】—— 适配器模式_适配器模式 钱转为游戏币-程序员宅基地

文章浏览阅读211次。1 定义适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。适配器模式的好处是,客户不必为了应对不同的接口而每次都跟着改变,只需要将接口转换的部分通过适配器封装起来就可以了。2 类图Client:客户端,接口调用方。Target:目标接口,客户端所期望使用的接口,也是适配器所要适配的接口。Adaptee:被适配者,系统原有的实现。A..._适配器模式 钱转为游戏币

python 使用API并将获取到的数据可视化的基本方法(详细)_根据api展示数据-程序员宅基地

文章浏览阅读2.8k次,点赞2次,收藏20次。我们将编写一个程序,它将会自动下载GitHub网站上星星最多的python项目的信息,并对这些信息简单可视化。_根据api展示数据

推荐文章

热门文章

相关标签