使用Runtime编译和执行Java代码#exec()

时间:2010-08-26 17:28:42

标签: java runtime.exec

import java.io.*;

public class Auto {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

        try {
            Runtime.getRuntime().exec("javac C:/HelloWorld.java");
            Runtime.getRuntime().exec("java C:/HelloWorld > C:/out.txt");
            System.out.println("END");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

该程序能够编译'HelloWorld.java'文件,但不能执行它(HelloWorld)。 有人可以建议我如何让它工作? 提前致谢! :) 此外,如果输出可以在另一个文本文件中使用'output.txt'。

3 个答案:

答案 0 :(得分:4)

运行java程序时,您必须位于项目根目录中,并运行java package.to.ClassWhichContainsMainMethod

Runtime.getRuntime().exec()将为您提供Process,其中包含OutputStreamInpuStream已执行的应用程序。

您可以将InputStream内容重定向到日志文件。

在你的情况下,我会使用这个exec:public Process exec(String command, String[] envp, File dir),如下所示:

exec("java HelloWorld", null, new File("C:/"));

将数据从inputStream复制到文件(this post上被盗的代码):

public runningMethod(){
    Process p = exec("java HelloWorld", null, new File("C:/"));
    pipe(p.getInputStream(), new FileOutputStream("C:/test.txt"));
}

public void pipe(InputStream in, OutputStream out) {
    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
    int writtenBytes;
    while((writtenBytes = in.read(buf)) >= 0) {
        out.write(buf, 0, writtenBytes);
    }
}

答案 1 :(得分:3)

3分。

  1. JavaCompiler是在Java 1.6中引入的,允许从Java代码中直接编译Java源代码。
  2. ProcessBuilder(1.5+)是一种更简单/更健壮的方式来启动流程。
  3. 要处理任何流程,请务必阅读并实施When Runtime.exec() won't
  4. 的所有要点

答案 2 :(得分:0)

您不在java中执行“.java”。您执行一个类文件。所以将第二行改为:

Runtime.getRuntime().exec("cd c:\;java HelloWorld > C:/out.txt");

对于输出,您可能希望使用inputStream,而不是重定向到文件:

InputStream is = Runtime.getRuntime().exec("cd c:\;java HelloWorld").getInputStream();