【问题标题】:Compiling and executing Java code using Runtime#exec()使用 Runtime#exec() 编译和执行 Java 代码
【发布时间】:2010-08-26 17:28:42
【问题描述】:
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”。

【问题讨论】:

  • 您不执行 .java 文件。试试java c:/HelloWorld
  • 这不是我感兴趣的问题,我已经纠正了,但是错误地发布了旧的错误代码。对不起:)
  • 请告诉我如何执行程序

标签: java runtime.exec


【解决方案1】:

运行java程序时,必须在项目根目录下运行java package.to.ClassWhichContainsMainMethod

Runtime.getRuntime().exec() 会给你一个Process,其中包含一个OutputStream 和一个InpuStream 到执行的应用程序。

您可以将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);
    }
}

【讨论】:

  • 嗨 Andreas_D 我试过这个:- Runtime.getRuntime().exec("java HelloWorld", null, new File("C:/"));但仍然无法在 out.txt 文件中获得输出。我不知道如何使用 getInputStream 和 getOutputStreams。你能告诉我如何在 out.txt 文件中获取输出吗?
【解决方案2】:

3 分。

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

【讨论】:

    【解决方案3】:

    您没有在 java 中执行“.java”。你执行一个类文件。所以把第二行改成:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2021-12-27
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多