標籤:
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 }
Android shell command execute Demo