首页 > 编程语言 >java调用cmd命令

java调用cmd命令

时间:2023-06-25 13:55:05浏览次数:45  
标签:commands 调用 java cmd List util CompletableFuture import

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;

import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.AbstractMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Slf4j
public class Cmd3Util {
    public static Map.Entry<List<String>,List<String>> execute(String[] commands) {
        log.info("commands is `{}`",String.join(" ",commands));
        Map.Entry<List<String>,List<String>> entry = null;
        try {
            ProcessBuilder processBuilder = new ProcessBuilder(commands);
            Process process = processBuilder.start();
            ExecutorService service = Executors.newFixedThreadPool(2);
            CompletableFuture<List<String>> okFuture = CompletableFuture.supplyAsync(() -> handler(process.getInputStream()),service);
            CompletableFuture<List<String>> errFuture = CompletableFuture.supplyAsync(() -> handler(process.getErrorStream()),service);
            try {
                int exitCode = process.waitFor();
                log.info("exitCode is {}",exitCode);
            }catch (Exception ex) {
                ex.printStackTrace();
            }finally {
                CompletableFuture.allOf(okFuture,errFuture).join();
                List<String> okList = okFuture.get();
                List<String> errList = errFuture.get();
                entry = new AbstractMap.SimpleEntry<>(okList,errList);
                service.shutdown();
                process.destroy();
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return entry;
    }

    private static List<String> handler(InputStream inputStream) {
        try(InputStream is = inputStream) {
            return IOUtils.readLines(is, StandardCharsets.UTF_8);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String[] commands = new String[3];
        commands[0] = "yt-dlp";
        commands[1] = "-F";
        commands[2] = "https://www.youtube.com/watch?v=0qs8aAsufjQ";
        Map.Entry<List<String>,List<String>> entry = execute(commands);
        List<String> okList = entry.getKey();
        List<String> errList = entry.getValue();
        okList.forEach(log::info);
        log.info("----------------------");
        errList.forEach(log::info);
    }
}

标签:commands,调用,java,cmd,List,util,CompletableFuture,import
From: https://www.cnblogs.com/xiaogblog/p/17502761.html

相关文章

  • WebAssembly能不能取代JavaScript?15张卡通图给你答案!
    一切能用JavaScript实现的,终将用JavaScript实现。一切能编译为WebAssembly的,终将编译为WebAssembly。前端er们,WebAssembly用上了吗?在浏览器中快速运行非JavaScript语言,比如C、C++、Rust,是不是很香?今天,我们就来用15张小画图说WebAssembly。有必要先介绍一下小画的创作者。她叫LinCl......
  • JAVA SPI简单实现
    JavaSPI(ServiceProviderInterface)是一种用于实现组件化、插件化和可扩展性的机制。它是Java标准库提供的一种服务发现机制,用于在运行时动态加载和实例化实现了特定接口的类。JavaSPI的核心概念是服务接口(ServiceInterface)、服务实现者(ServiceProvider)和服务提供者配置文件(S......
  • JavaScript
    JavaScriptHTML(结构层)CSS(表现层)JavaScript(行为层)什么是JavaScriptJavaScript是一门世界上最流行的脚本语言。一个合格的后端人员,必须要精通JavaScript历史ECMScript它可以理解为是JavaScript的一个标准。最新版本已经到es6版本。但是大部分浏览器还只停留在支持es5代......
  • B+ tree implemented in Java
    B+树相关介绍B+树是一棵多叉排序树,即每个非叶子节点可以包含多个子节点,其整体结构呈扁平化,所以其非常适配于数据库和操作系统的文件系统中。且B+树能够保持数据的稳定有序,插入和删除都拥有较稳定的对数时间复杂度。B+树的特性:以m阶为例,m表示内部节点即非叶子节点可以包含的......
  • 前端ajax调用后端下载Excel模板流,解决输出乱码等问题
    functionimportTemplate(){$.ajax({url:"/importTemplate",type:"get",success:function(data){letdownloadUrl="../importTemplate"//创建a标签letlabel=$("......
  • Java实现扑克牌24点游戏
    游戏规则:4张扑克牌A~K分别代表1点至13点,要求4张牌加减乘除后得到点数为24.(除法必须整除)代码实现思路:构建初始变量实现初始化变量值实现运算分析可能出现的运算组合不考虑运算符优先级,组合3/5/7重复(最后会解释为什么不考虑运算符优先级,注1)代码实......
  • Java学习之mysql为什么可以实现可重复读
    什么是mvccMysql的隔离级别是‘可重复读’,即:事务A在读到一条数据之后,此时事务B对该数据进行了修改操作并提交,那么事务A再读该数据,依然还是原来的内容。它的实现原理是MVCC(Multi-VersionConcurrencyControl)多版本并发控制,MVCC保证当前查询为快照读,所以不受其他事务影响。什......
  • mockito5.4.0单元测试(9) --调用同一个方法和参数依次返回不同的值thenReturn和thenTh
    mockito官方文档地址:https://www.javadoc.io/doc/org.mockito/mockito-core/latest/org/mockito/Mockito.html#exact_verification//mock一个对象ListsingleMock=mock(List.class);when(singleMock.get(20)).thenThrow(newRuntimeException())//mock第一次调用......
  • 【已解决】GO语言开发中调用另一个库报错 cannot refer to unexported name XXXX
    packagemainimport( "fmt" "study_gos/main/kehu")//使用了go.mod//GOPATH;D:\workspace\studys\study_gos//cd/d/workspace/studys/study_gos/src//goenv-wGO111MODULE=on//gomodinitstudy_gos//gomodtidy//跳过goget失败//go......
  • Java 插入排序
    publicstaticint[]insertSort(int[]nums){for(inti=1,len=nums.length;i<len;i++){intcurrent=nums[i];intj=i-1;for(;j>=0&&current<nums[j];j--)num......