在Java中运行命令行

有没有办法在Java应用程序中运行这个命令行?

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

我可以用命令运行它,但是我不能在Java中执行它。

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

http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html

你也可以看到这样的输出:

 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”。

为了避免被调用的进程在标准输出和/或错误输出大量数据时被阻塞,您必须使用Craigo提供的解决scheme。 另请注意,ProcessBuilder比Runtime.getRuntime()。exec()更好。 这是由于几个原因:它更好地标记参数,并且还处理错误标准输出(也在这里检查)。

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

我使用一个新的function“看”来收集这个数据在一个新的线程。 被调用的进程结束后,该线程将在调用过程中完成。

 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(); } 
 import java.io.*; Process p = Runtime.getRuntime().exec("java -jar map.jar time.rel test.txt debug"); 

如果遇到任何进一步的问题,请考虑以下内容,但是我猜测上述内容适用于您:

Runtime.exec()的问题

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

你是否在运行时间类中尝试了exec命令?

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

运行时 – Java文档

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

关于什么

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