中易网

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

答案:1  悬赏:50  
解决时间 2021-04-06 23:06
Java:Runtime.exec() Runtime.getRuntime().exec(),哪个才是在Java中调用Linux指令的方式呢?
最佳答案

    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);


这两个是一样的效果。
上面的方法是我写的。直接改改就行。抽象成工具类就可以了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
伊兰特工作台左上角稍有颠簸就有咯吱咯吱异响
一种瓶体上写有“三迪”两个字,治皮肤痒的喷
请问一下借条正规格式怎么写的
日发纺机地址有知道的么?有点事想过去
复合肥能浇多肉
武汉哪里有卖日本二手钢琴的地方?
暴风雪玉米蛇50厘米多少钱
自闭症儿童自言自语怎么改善?
我的笔记本电脑玩强滩登陆,血战上海滩,生化
纳税调增项目中工资是否为实际账面工资,是否
鑫源洗车装饰行地址有知道的么?有点事想过去
广西在历史上出了多少个科举状元?
知道圆的直径时方程,怎么求圆心?x,y在其中是
西点厨师技师论文怎么写
一个男歌手的名字,三个字的,只记得他名字中
推荐资讯
朋友借了一万元 现在不还了 微信电话全部拉黑
什么是国家荣誉啊?谁能告诉我啊?谢谢!
山东省海洋化工科学研究院实验员是做什么的?
梦幻西游如果如果想打MW的火牛阵符石,应该怎
为什么大便时候一定小便
轩辕剑 天之痕 巴蜀古王墓地仙 在哪里啊啊啊
老婆内相会出轨吗?
求僵尸类单机游戏
旺塘大厦A栋我想知道这个在什么地方
四年级下册数学题:已知a代表一个数,但不是0,
丰田新威驰1.3中配多少价价怎么样
有哪些路由器值得推荐
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?