Запуск командной строки в Java

Есть ли способ запустить эту командную строку в приложении Java?

java -jar map.jar time.rel test.txt debug

Я могу запустить его с помощью команды, но не смог сделать это в Java.

Ответ 2

Вы также можете посмотреть вывод следующим образом:

final Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");

new Thread(new Runnable() {
    public void run() {
     BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
     String line = null; 

     try {
        while ((line = input.readLine()) != null)
            System.out.println(line);
     } catch (IOException e) {
            e.printStackTrace();
     }
    }
}).start();

p.waitFor();

И не забывайте, что если вы работаете в Windows, вам нужно поставить "cmd/c" перед вашей командой.

Ответ 3

Чтобы избежать блокирования вызываемого процесса, если он выводит много данных на стандартный вывод и/или ошибку, вы должны использовать решение, предоставленное Craigo. Обратите внимание также, что ProcessBuilder лучше, чем Runtime.getRuntime(). Exec(). Это связано с несколькими причинами: он значительно улучшает аргументы, а также заботится о стандартном выпуске ошибки (также проверьте здесь).

ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();

// Watch the process
watch(process);

Я использую новую функцию "смотреть", чтобы собрать эти данные в новом потоке. Этот поток завершится в вызывающем процессе, когда вызываемый процесс завершится.

private static void watch(final Process process) {
    new Thread() {
        public void run() {
            BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = null; 
            try {
                while ((line = input.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();
}

Ответ 4

import java.io.*;

Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");

Считайте следующее, если у вас возникнут какие-либо дополнительные проблемы, но я предполагаю, что приведенное выше будет работать для вас:

Проблемы с Runtime.exec()

Ответ 5

Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");

Ответ 6

Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug");

Ответ 8

как насчет

public class CmdExec {

public static Scanner s = null;


public static void main(String[] args) throws InterruptedException, IOException {
    s = new Scanner(System.in);
    System.out.print("$ ");
    String cmd = s.nextLine();
    final Process p = Runtime.getRuntime().exec(cmd);

    new Thread(new Runnable() {
        public void run() {
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null; 

            try {
                while ((line = input.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

    p.waitFor();
     }

 }