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 * @author zengjf 15 */ 16 public class ShellExecute { 17 /** 18 * 本函数用于执行Linux shell命令 19 * 20 * @param command shell命令,支持管道,重定向 21 * @param directory 在指定目录下执行命令 22 * @return 返回shell命令执行结果 23 * @throws IOException 抛出IOException 24 */ 25 public static String execute ( String command, String directory ) 26 throws IOException { 27 28 // check the arguments 29 if (null == command) 30 return ""; 31 32 if (command.trim().equals("")) 33 return ""; 34 35 if (null == directory || directory.trim().equals("")) 36 directory = "/"; 37 38 String result = "" ; 39 40 List<String> cmds = new ArrayList<String>(); 41 cmds.add("sh"); 42 cmds.add("-c"); 43 cmds.add(command); 44 45 try { 46 ProcessBuilder builder = new ProcessBuilder(cmds); 47 48 if ( directory != null ) 49 builder.directory ( new File ( directory ) ) ; 50 51 builder.redirectErrorStream (true) ; 52 Process process = builder.start ( ) ; 53 54 //得到命令执行后的结果 55 InputStream is = process.getInputStream ( ) ; 56 byte[] buffer = new byte[1024] ; 57 while ( is.read(buffer) != -1 ) 58 result = result + new String (buffer) ; 59 60 is.close ( ) ; 61 } catch ( Exception e ) { 62 e.printStackTrace ( ) ; 63 } 64 return result.trim() ; 65 } 66 67 /** 68 * 本函数用于执行Linux shell命令,执行目录被指定为:"/" 69 * 70 * @param command shell命令,支持管道,重定向 71 * @return 返回shell命令执行结果 72 * @throws IOException 抛出IOException 73 */ 74 public static String execute (String command) throws IOException { 75 76 // check the arguments 77 if (null == command) 78 return ""; 79 80 if (command.trim().equals("")) 81 return ""; 82 83 return execute(command, "/"); 84 } 85 86 /** 87 * 本函数用于判断dmesg中是否存在pattern字符串,执行目录被指定为:"/" 88 * 89 * @param pattern 给grep匹配的字符串 90 * @return true: dmesg中存在pattern中的字符串<br> 91 * false:dmesg中不存在pattern中的字符串 92 * @throws IOException 抛出IOException 93 */ 94 public static boolean deviceExist(String pattern) throws IOException{ 95 96 // check the arguments 97 if (null == pattern) 98 return false; 99 100 if (pattern.trim().equals("")) 101 return false; 102 103 return execute("dmesg | grep " + pattern).length() > 0; 104 } 105 }
时间: 2024-10-12 16:43:50