Heim  >  Artikel  >  Java  >  So verwenden Sie den Befehl cmd in Java

So verwenden Sie den Befehl cmd in Java

coldplay.xixi
coldplay.xixiOriginal
2020-08-19 11:46:364380Durchsuche

So verwenden Sie den cmd-Befehl in Java: 1. Verwenden Sie die Methode [exec(String command)] zur Laufzeit, um den cmd-Befehl auszuführen. 2. Schreiben Sie zuerst den ausgeführten cmd-Befehl in eine Datei und führen Sie ihn dann aus Ausführungsfehlerprotokoll kann gedruckt werden und der Thread bleibt nicht hängen.

So verwenden Sie den Befehl cmd in Java

【Verwandte Lernempfehlungen: Java Basic Tutorial

So verwenden Sie den cmd-Befehl in Java:

1 Verwenden Sie die exec-Methode (String-Befehl) in Runtime, um den cmd-Befehl auszuführen. wie folgt:

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

Diese Methode löst eine IOException aus, aber im Projekt gibt es keine Ausnahme und der Befehl wird nicht ausgeführt.

2. Diese Methode kann die erwarteten Ergebnisse der meisten cmd-Aufrufe erzielen, aber manchmal bleibt der Befehl bei p.waitFor(); hängen, was zu einer Thread-Blockierung führt

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. Die Verwendung der folgenden Methode verursacht nicht das gleiche Problem wie 2. Der Unterschied zwischen Methode 2 und Methode 2 besteht darin, dass der Stream einfach durch getInputStream ersetzt wird. 4. Der Nachteil von Methode 3 besteht darin, dass die Fehlermeldung dort nicht ausgedruckt werden kann ist eine weitere Methode. Der ausgeführte cmd-Befehl wird zuerst in die Datei geschrieben und dann ausgeführt. Dies bedeutet, dass der Thread nicht hängen bleibt, wenn das Ausführungsfehlerprotokoll gedruckt werden kann.

  Schreiben Sie den Ausführungsnamen in die Datei. FileUtils.java

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

 b. Befehl ausführen

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

Verwandte Lernempfehlungen:
Programmiervideo

Das obige ist der detaillierte Inhalt vonSo verwenden Sie den Befehl cmd in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn