博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android shell command execute Demo
阅读量:6040 次
发布时间:2019-06-20

本文共 3422 字,大约阅读时间需要 11 分钟。

1 package com.android.utils;  2   3   4 import java.io.File;  5   6 import java.io.IOException;  7 import java.io.InputStream;  8 import java.util.ArrayList;  9 import java.util.List; 10  11 /** 12  * 本类主要用于在Java层执行Linux shell命令,获取一些系统下的信息 13  * 本例中的dmesg需要一些额外的权限才能使用 14  * 参考文章: 15  *    1. read android dmesg with code 16  *        http://stackoverflow.com/questions/3643599/read-android-dmesg-with-code 17  *    2. Java执行带重定向或管道的shell命令的问题 18  *        http://www.linuxidc.com/Linux/2012-07/64526.htm 19  * 20  * @author zengjf 21  */ 22 public class ShellExecute { 23     /** 24      * 本函数用于执行Linux shell命令  25      *  26      * @param command                 shell命令,支持管道,重定向 27      * @param directory               在指定目录下执行命令 28      * @return                        返回shell命令执行结果 29      * @throws IOException            抛出IOException 30      */ 31     public static String execute ( String command, String directory )   32             throws IOException {   33          34         // check the arguments 35         if (null == command)  36             return ""; 37  38         if (command.trim().equals(""))  39             return ""; 40          41         if (null == directory || directory.trim().equals(""))  42             directory = "/"; 43  44         String result = "" ;   45  46         List
cmds = new ArrayList
(); 47 cmds.add("sh"); 48 cmds.add("-c"); 49 cmds.add(command); 50 51 try { 52 ProcessBuilder builder = new ProcessBuilder(cmds); 53 54 if ( directory != null ) 55 builder.directory ( new File ( directory ) ) ; 56 57 builder.redirectErrorStream (true) ; 58 Process process = builder.start ( ) ; 59 60 //得到命令执行后的结果 61 InputStream is = process.getInputStream ( ) ; 62 byte[] buffer = new byte[1024] ; 63 while ( is.read(buffer) != -1 ) 64 result = result + new String (buffer) ; 65 66 is.close ( ) ; 67 } catch ( Exception e ) { 68 e.printStackTrace ( ) ; 69 } 70 return result.trim() ; 71 } 72 73 /** 74 * 本函数用于执行Linux shell命令,执行目录被指定为:"/" 75 * 76 * @param command shell命令,支持管道,重定向 77 * @return 返回shell命令执行结果 78 * @throws IOException 抛出IOException 79 */ 80 public static String execute (String command) throws IOException { 81 82 // check the arguments 83 if (null == command) 84 return ""; 85 86 if (command.trim().equals("")) 87 return ""; 88 89 return execute(command, "/"); 90 } 91 92 /** 93 * 本函数用于判断dmesg中是否存在pattern字符串,执行目录被指定为:"/" 94 * 95 * @param pattern 给grep匹配的字符串 96 * @return true: dmesg中存在pattern中的字符串
97 * false:dmesg中不存在pattern中的字符串 98 * @throws IOException 抛出IOException 99 */100 public static boolean deviceExist(String pattern) throws IOException{101 102 // check the arguments103 if (null == pattern) 104 return false;105 106 if (pattern.trim().equals("")) 107 return false;108 109 return execute("dmesg | grep " + pattern).length() > 0;110 }111 }

 

转载地址:http://cnrhx.baihongyu.com/

你可能感兴趣的文章
JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
查看>>
laravel5.5 Syntax error or access violation: 1071 Specified key was too long
查看>>
分布式锁与实现(一)——基于Redis实现
查看>>
RDLC报表显示图片
查看>>
用查表查找汉字笔画
查看>>
top高级技能
查看>>
两张表先各自左外连接,然后在相互左外连接查找省市县的数据(业务需求必须这样做,省市去的是第一张表,而市县取的是第二张表,两张表中间通过市的名字连接)...
查看>>
sso单点登录,单点登录原理图,单点登录图解,单点登录
查看>>
原码、反码、补码的正(nao)确(can)打开方式
查看>>
《算法导论》
查看>>
ResourceBundle.getBundle方法demo
查看>>
基于Dubbo的http自动测试工具分享
查看>>
[linux] C语言Linux系统编程-TCP通信的11种状态
查看>>
{head first} --- networking 3
查看>>
SpringCloud入门之YAML格式文件规范学习
查看>>
深入理解Dalvik虚拟机- 解释器的执行机制
查看>>
android------2018 年初值得关注的 16 个新 Android 库和项目
查看>>
Mac eclipse 连接安卓手机调试 adb
查看>>
国际巨头互联网公司一些运营与管理思路
查看>>
数据库~Mysql里的Explain说明
查看>>