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