Java:Runtime.exec() Runtime.getRuntime().exec(),哪个才是在Java中调用Linux指令的方式呢?

 我来答
baoer1127
推荐于2016-08-25 · TA获得超过926个赞
知道小有建树答主
回答量:939
采纳率:71%
帮助的人:332万
展开全部

    /**
     * cmd 脚本执行方法<br>
     * 该方法不执行任何逻辑.<br>
     * 就是判断操作系统,返回执行结果是否成功.
     * 
     * @param invoke执行的shell脚本命令
     */
    public static String cmdControler2(String invoke) {
        System.out.println(invoke);
        if (invoke == null)
            return null;
        // 获取操作系统的名称 如:"Windows 7" or "Linux"
        String osName = System.getProperties().getProperty("os.name");
        String[] cmd_arr = new String[] { "/bin/sh", "-c", invoke };
        // // 根据操作系统生成shell脚本
        if (osName.contains("Windows"))
            cmd_arr = new String[] { "cmd", "/c", invoke };
        Process process = null;
        BufferedReader result = null, error = null;
        try {
            process = new ProcessBuilder(cmd_arr).start();
            // 功能是一样的
            // Process process = Runtime.getRuntime().exec(cmd_arr);
            String str = "";
            result = new BufferedReader(new InputStreamReader(
                    process.getInputStream()));
            error = new BufferedReader(new InputStreamReader(
                    process.getErrorStream()));
            while ((str = result.readLine()) != null) {
                // 成功提示
                // 此处的成功提示不需要显示
                // System.out.println(str);
                return str;
            }
            while ((str = error.readLine()) != null) {
                // 存在错误提示
                System.out.println(str);
                return ERRORSTR + str;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            // 关闭流
            if (result != null) {
                try {
                    result.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (error != null) {
                try {
                    error.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 释放process
            if (process != null)
                process.destroy();
        }
        // 前面的都没有执行就说明没有成功
        return "";
    }


              Process process = new ProcessBuilder(cmd_arr).start();
            // 功能是一样的
            // Process process = Runtime.getRuntime().exec(cmd_arr);


这两个是一样的效果。

上面的方法是我写的。直接改改就行。抽象成工具类就可以了。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式