调用:

 new ShellUtils().execCommand("ifconfig eth0 192.168.1.202 netmask 255.255.255.0 "                       ,true,true);

ShellUtils.class

package com.example.sz.ip;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.List;public class ShellUtils {    public static final String COMMAND_SU = "su";    public static final String COMMAND_SH = "sh";    public static final String COMMAND_EXIT = "exit\n";    public static final String COMMAND_LINE_END = "\n";    //这一段看个人情况,我不需要    /*public ShellUtils() {        throw new AssertionError();    }*/    /**     * 查看是否有了root权限     *     * @return     */    public static boolean checkRootPermission() {        return execCommand("echo root", true, false).result == 0;    }    /**     * 执行shell命令,默认返回结果     *     * @param command     *            command     * @param     * //运行是否需要root权限     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(String command, boolean isRoot) {        return execCommand(new String[] { command }, isRoot, true);    }    /**     * 执行shell命令,默认返回结果     *     * @param commands     *            command list     * @param     * //运行是否需要root权限     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(List commands,                                            boolean isRoot) {        return execCommand(                commands == null ? null : commands.toArray(new String[] {}),                isRoot, true);    }    /**     * 执行shell命令,默认返回结果     *     * @param commands     *            command array     * @param     * //运行是否需要root权限     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(String[] commands, boolean isRoot) {        return execCommand(commands, isRoot, true);    }    /**     * execute shell command     *     * @param command     *            command     * @param     * //运行是否需要root权限     * @param isNeedResultMsg     *            whether need result msg     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(String command, boolean isRoot,                                            boolean isNeedResultMsg) {        return execCommand(new String[] { command }, isRoot, isNeedResultMsg);    }    /**     * execute shell commands     *     * @param commands     *            command list     * @param     * //运行是否需要root权限     * @param     * //是否需要返回运行结果     * @return     * @see ShellUtils#execCommand(String[], boolean, boolean)     */    public static CommandResult execCommand(List commands,                                            boolean isRoot, boolean isNeedResultMsg) {        return execCommand(                commands == null ? null : commands.toArray(new String[] {}),                isRoot, isNeedResultMsg);    }    /**     * execute shell commands     *     * @param commands     *            command array     * @param     * //运行是否需要root权限     * @param     * //是否需要返回运行结果     * @return 
    *
  • if isNeedResultMsg is false, {@link CommandResult#successMsg} * is null and {@link CommandResult#errorMsg} is null.
  • *
  • if {@link CommandResult#result} is -1, there maybe some * excepiton.
  • *
*/
public static CommandResult execCommand(String[] commands, boolean isRoot, boolean isNeedResultMsg) { int result = -1; if (commands == null || commands.length == 0) { return new CommandResult(result, null, null); } Process process = null; BufferedReader successResult = null; BufferedReader errorResult = null; StringBuilder successMsg = null; StringBuilder errorMsg = null; DataOutputStream os = null; try { process = Runtime.getRuntime().exec( isRoot ? COMMAND_SU : COMMAND_SH); os = new DataOutputStream(process.getOutputStream()); for (String command : commands) { if (command == null) { continue; } // donnot use os.writeBytes(commmand), avoid chinese charset // error os.write(command.getBytes()); os.writeBytes(COMMAND_LINE_END); os.flush(); } os.writeBytes(COMMAND_EXIT); os.flush(); result = process.waitFor(); // get command result if (isNeedResultMsg) { successMsg = new StringBuilder(); errorMsg = new StringBuilder(); successResult = new BufferedReader(new InputStreamReader( process.getInputStream())); errorResult = new BufferedReader(new InputStreamReader( process.getErrorStream())); String s; while ((s = successResult.readLine()) != null) { successMsg.append(s); } while ((s = errorResult.readLine()) != null) { errorMsg.append(s); } } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } if (successResult != null) { successResult.close(); } if (errorResult != null) { errorResult.close(); } } catch (IOException e) { e.printStackTrace(); } if (process != null) { process.destroy(); } } return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null : errorMsg.toString()); } /** * 运行结果 *
    *
  • {@link CommandResult#result} means result of command, 0 means normal, * else means error, same to excute in linux shell
  • *
  • {@link CommandResult#successMsg} means success message of command * result
  • *
  • {@link CommandResult#errorMsg} means error message of command result
  • *
* * @author Trinea * 2013-5-16 */
public static class CommandResult { /** 运行结果 **/ public int result; /** 运行成功结果 **/ public String successMsg; /** 运行失败结果 **/ public String errorMsg; public CommandResult(int result) { this.result = result; } public CommandResult(int result, String successMsg, String errorMsg) { this.result = result; this.successMsg = successMsg; this.errorMsg = errorMsg; } }}

更多相关文章

  1. android 游戏开发-libgdx(一)
  2. Android上运行QT项目Necessitas的基本原理
  3. Android:Ping命令测试网络
  4. Android在屏幕任意位置显示对话框
  5. 程序中如何获取Android的Root权限
  6. 运行时改变Button的android:drawableTop
  7. android manifest.xml中元素含义
  8. Android中调用startActivity结果导致:java.lang.RuntimeException
  9. android 添加桌面窗口小部件(托至桌面需要点击按钮才能生成的)

随机推荐

  1. android设备添加F1-F12按键功能
  2. android之Tabhost深入讲解二
  3. Android动画播放的常用方式
  4. ContentProvider 翻译
  5. android获得屏幕高度和宽度
  6. Android应用程序安装过程源代码分析(3)
  7. android 获取界面上所有控件
  8. Android开发——控件基础(七)ListView组件:
  9. Android中使用Gallery_tabhost来实现标签
  10. alps/frameworks/base/wifi/java/android