首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中运行命令行

在Java中运行命令行
EN

Stack Overflow用户
提问于 2011-12-14 05:35:37
回答 8查看 296.8K关注 0票数 135

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

代码语言:javascript
复制
java -jar map.jar time.rel test.txt debug

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-12-14 05:38:51

代码语言:javascript
复制
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

票数 201
EN

Stack Overflow用户

发布于 2014-09-09 10:00:43

您还可以像这样查看输出:

代码语言:javascript
复制
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放在你的命令前面。

编辑:对于奖励积分,您还可以使用ProcessBuilder将输入传递给程序:

代码语言:javascript
复制
String[] command = new String[] {
        "choice",
        "/C",
        "YN",
        "/M",
        "\"Press Y if you're cool\""
};
String inputLine = "Y";

ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

writer.write(inputLine);
writer.newLine();
writer.close();

String line;

while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

这将运行windows命令choice /C YN /M "Press Y if you're cool"并以Y响应。因此,输出将是:

代码语言:javascript
复制
Press Y if you're cool [Y,N]?Y
票数 56
EN

Stack Overflow用户

发布于 2015-06-19 06:25:48

为了避免被调用的进程在标准输出和/或错误上输出大量数据时被阻塞,您必须使用Craigo提供的解决方案。还要注意,ProcessBuilder比Runtime.getRuntime().exec()更好。这有几个原因:它对参数进行了更好的标记化,并且还处理了错误标准输出(也可以检查here)。

代码语言:javascript
复制
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();

// Watch the process
watch(process);

我使用一个新函数"watch“在一个新线程中收集这些数据。当被调用的进程结束时,此线程将在调用进程中结束。

代码语言:javascript
复制
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();
}
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8496494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档