首页后端开发其他后端知识java中cmd命令是什么使用的,方法是什么?

java中cmd命令是什么使用的,方法是什么?

时间2024-03-27 08:46:03发布访客分类其他后端知识浏览1214
导读:相信很多人对“java中cmd命令是什么使用的,方法是什么?”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 java如何用cmd命令的方法:1、使用Runtime中【exec(Str...
相信很多人对“java中cmd命令是什么使用的,方法是什么?”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助


java如何用cmd命令的方法:1、使用Runtime中【exec(String command)】方法执行cmd命令;2、先将执行的cmd命令写入到文件中后再执行,这是如果执行错误日志可以打印,线程也不会卡死。

【相关学习推荐:java基础教程】

java如何用cmd命令的方法:

1.使用Runtime中exec(String command)方法执行cmd命令,如下:

Process p = Runtime.getRuntime().exec(cmd);
    

此方法会抛出IOException,但是在项目中遇到没有出现异常,命令也没有执行的情况。

2.此方法可以达到大多的cmd调用的期望结果,但有些时候回出现命令卡死在p.waitFor(); 上,造成线程阻塞

public static boolean runCMD(String cmd) throws IOException, InterruptedException {
    
        final String METHOD_NAME = "runCMD";
    
        Process p = Runtime.getRuntime().exec(cmd);
    
        BufferedReader br = null;

        try {
    
            br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    
            String readLine = br.readLine();
    
            StringBuilder builder = new StringBuilder();

            while (readLine != null) {
    
                readLine = br.readLine();
    
                builder.append(readLine);

            }
    
            logger.debug(METHOD_NAME + "#readLine: " + builder.toString());
    
            p.waitFor();
    
            int i = p.exitValue();
    
            logger.info(METHOD_NAME + "#exitValue = " + i);

            if (i == 0) {
    
                return true;

            }
 else {
    
                return false;

            }

        }
 catch (IOException e) {
    
            logger.error(METHOD_NAME + "#ErrMsg=" + e.getMessage());
    
            e.printStackTrace();
    
            throw e;

        }
 finally {

            if (br != null) {
    
                br.close();

            }

        }

    }

3.使用以下方法不会出现和2一样情况下得阻塞的问题,与2的区别就是获取流不同,将getErrorStream换成getInputStream就好了

public static boolean runCMD(String cmd) throws IOException, InterruptedException {
    
        final String METHOD_NAME = "runCMD";
    
        
        // Process p = Runtime.getRuntime().exec("cmd.exe /C " + cmd);
    
        Process p = Runtime.getRuntime().exec(cmd);
    
        BufferedReader br = null;

        try {
    
            // br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    
            br = new BufferedReader(new InputStreamReader(p.getInputStream()));
    
            String readLine = br.readLine();
    
            StringBuilder builder = new StringBuilder();

            while (readLine != null) {
    
                readLine = br.readLine();
    
                builder.append(readLine);

            }
    
            logger.debug(METHOD_NAME + "#readLine: " + builder.toString());
    
            p.waitFor();
    
            int i = p.exitValue();
    
            logger.info(METHOD_NAME + "#exitValue = " + i);

            if (i == 0) {
    
                return true;

            }
 else {
    
                return false;

            }

        }
 catch (IOException e) {
    
            logger.error(METHOD_NAME + "#ErrMsg=" + e.getMessage());
    
            e.printStackTrace();
    
            throw e;

        }
 finally {

            if (br != null) {
    
                br.close();

            }

        }

    }

4.对于3方法有个缺点是执行错误时无法将错误消息打印出来,还有一个方法是先将执行的cmd命令写入到文件中后再执行,这是如果执行错误日志可以打印,线程也不会卡死。

  a.将执行的命名写入到文件中。FileUtils.java

  public static boolean writeFile(File exportFile, final String content) {

        if (exportFile == null || StringUtils.isEmpty(content)) {
    
            return false;

        }

        if (!exportFile.exists()) {

            try {
    
                exportFile.getParentFile().mkdirs();
    
                exportFile.createNewFile();

            }
 catch (IOException e) {
    
                e.printStackTrace();
    
                logger.error("create local json file exception: " + e.getMessage());
    
                return false;

            }

        }
    
        BufferedWriter bufferedWriter = null;

        try {
    
            FileOutputStream os = new FileOutputStream(exportFile);
    
            FileDescriptor fd = os.getFD();
    
            bufferedWriter = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
    
            bufferedWriter.write(content);
    
            //Flush the data from the streams and writes into system buffers
            //The data may or may not be written to disk.
            bufferedWriter.flush();
    
            //block until the system buffers have been written to disk.
            //After this method returns, the data is guaranteed to have
            //been written to disk.
            fd.sync();

        }
 catch (UnsupportedEncodingException e) {
    
            logger.error("saveDBData#catch an UnsupportedEncodingException (" + e.getMessage() + ")");
    
            return false;

        }
 catch (FileNotFoundException e) {
    
            logger.error("saveDBData#catch an FileNotFoundException (" + e.getMessage() + ")");
    
            return false;

        }
 catch (IOException e) {
    
            logger.error("saveDBData#catch an IOException (" + e.getMessage() + ")");
    
            return false;

        }
 catch (Exception e) {
    
            logger.error("saveDBData#catch an exception (" + e.getMessage() + ")");
    
            return false;

        }
 finally {

            try {

                if (bufferedWriter != null) {
    
                    bufferedWriter.close();
    
                    bufferedWriter = null;

                }

            }
 catch (IOException e) {
    
                logger.error("writeJsonToFile#catch an exception (" + e.getMessage() + ")");

            }

        }
    
        return true;

    }

  b.执行命令

    public static boolean excuteCMDBatFile(String cmd) {
    
        final String METHOD_NAME = "excuteCMDBatFile#";
    
        boolean result = true;
    
        Process p;
    
        File batFile = new File("D:/test/cmd.bat");
    
        System.out.println(batFile.getAbsolutePath());
    
        boolean isSuccess = FileUtils.writeFile(batFile, cmd);

        if(!isSuccess) {
    
            logger.error(METHOD_NAME + "write cmd to File failed.");
    
            return false;

        }
    
        
        String batFilePath = "\"" + MigrateContants.CMD_BAT_FILE + "\"";
    
        logger.info("cmd path:" + batFilePath);

        try {
    
            p = Runtime.getRuntime().exec(batFilePath);
    
            InputStream fis = p.getErrorStream();
    //p.getInputStream();
    
            InputStreamReader isr = new InputStreamReader(fis, System.getProperty("file.encoding"));
    
            BufferedReader br = new BufferedReader(isr);
    
            String line = null;
    
            StringBuilder builder = new StringBuilder();

            while ((line = br.readLine()) != null) {
    
                builder.append(line);

            }
    
            
            p.waitFor();
    
            int i = p.exitValue();
    
            logger.info(METHOD_NAME + "exitValue = " + i);

            if (i != 0) {
    
                result = false;
    
                logger.error(METHOD_NAME + "excute cmd failed, [result = " + result + ", error message = " + builder.toString() + "]");
    
                System.out.println(METHOD_NAME + "excute cmd failed, [result = " + result + ", error message = " + builder.toString() + "]");

            }
else {
    
                // logger.debug(METHOD_NAME + "excute cmd result = " + result);
    
                System.out.println(METHOD_NAME + "result = " + result);

            }

        }
 catch (Exception e) {
    
            result = false;
    
            e.printStackTrace();
    
            logger.error(METHOD_NAME + "fail to excute bat File [ErrMsg=" + e.getMessage() + "]");

        }
    
        return result;

    }
    



通过以上内容的阐述,相信大家对“java中cmd命令是什么使用的,方法是什么?”已经有了进一步的了解,更多相关的问题,欢迎关注网络或到官网咨询客服。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: java中cmd命令是什么使用的,方法是什么?
本文地址: https://pptw.com/jishu/654108.html
static的关键字有哪三大作用,分别是什么 java中map集合中是否有key存在,是怎么判断的呢?

游客 回复需填写必要信息