【shell命令】JAVA执行shell命令设置环境变量工作目录等

发布时间:2024年01月13日

【shell命令】JAVA执行shell命令设置环境变量工作目录等

使用方法

    public static void main(String[] args) {
        String execute = execute("ffmpeg");
        System.out.println(execute);

        execute = execute("ping www.baidu.com");
        System.out.println(execute);

    }

代码


    /**
     * 调用ProcessBuilder执行,相比Runtime方式,返回值不易丢失
     * @param command 命令
     * @return 执行结果
     */
    public static String execute(String command) {
        BufferedReader bufferedReader = null;
        StringBuilder stringBuilder = new StringBuilder();
        String result = null;
        try {
            File file = new File("C:\\daemonTmp");
            // 新建一个存储结果的缓存文件
            File tmpFile = new File("C:\\daemonTmp\\temp.tmp");
            if (!file.exists()) {
                file.mkdirs();
            }
            if (!tmpFile.exists()) {
                tmpFile.createNewFile();
            }
            ProcessBuilder processBuilder = new ProcessBuilder()
                    //TODO 这里如果是linux  需要换成linux的命令  做个判断
                    .command("cmd.exe", "/c", command).inheritIO();

            
            /**
             * 设置环境变量 开始
             */
            Map<String, String> environment = processBuilder.environment();
            environment.put("ffmpeg","C:\\APP\\media\\ffmpeg\\bin");
            String Path = environment.get("Path");
            Path +=";C:\\APP\\media\\ffmpeg\\bin";
            environment.put("Path", Path);
            System.out.println(environment);
            /**
             * 设置环境变量 结束
             */


            /**
             * 设置工作目录
             */
            processBuilder.directory(new File("C:\\APP\\media"));
            
            
            // 把控制台中的红字变成了黑字,用通常的方法其实获取不到,控制台的结果是pb.start()方法内部输出的。
            processBuilder.redirectErrorStream(true);
            // 输出执行结果。
            processBuilder.redirectOutput(tmpFile);
            // 等待语句执行完成,否则可能会读不到结果。
            processBuilder.start().waitFor();
            InputStream inputStream = new FileInputStream(tmpFile);
            //设置编码
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
            String line = null;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line + "\n");
            }
            bufferedReader.close();
            bufferedReader = null;

            result = stringBuilder.toString();

        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch(IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
    
    

文章来源:https://blog.csdn.net/G971005287W/article/details/135572908
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。