Java 运行时.getRuntime().exec中的命令不工作

Java 运行时.getRuntime().exec中的命令不工作,java,command-line,javac,Java,Command Line,Javac,我有一个名为MemoryComparison.java的java文件保存在文件夹D:\Documents\CodeAnalysis\project\u analysis\u RG\CodeAnalysis\input\master\Kajari\u G中 我还有另一个文件夹D:\Documents\CodeAnalysis\output\我想在执行后将上述java文件的输出存储在其中 在Java程序MemoryComparison.Java中,我没有给出任何包名 现在,我正在从另一个名为Read

我有一个名为MemoryComparison.java的java文件保存在文件夹D:\Documents\CodeAnalysis\project\u analysis\u RG\CodeAnalysis\input\master\Kajari\u G中

我还有另一个文件夹D:\Documents\CodeAnalysis\output\我想在执行后将上述java文件的输出存储在其中

在Java程序MemoryComparison.Java中,我没有给出任何包名

现在,我正在从另一个名为ReadFileInfolders.java的java程序编译和执行上述java程序。下面是代码片段:

try {
    Runtime.getRuntime().exec("javac input\\master\\Kajari_G\\MemoryComparison.java");
    Runtime.getRuntime().exec("java -cp input\\master\\Kajari_G\\ MemoryComparison > output\\output1.txt");
     } catch (IOException e) {
    e.printStackTrace();
     }
现在,第一个exec工作正常,并且.class文件在同一个文件夹中生成,MemoryComparison.java位于该文件夹中。但是第二个exec似乎没有工作,因为没有创建output1.txt

但是当我在命令提示符下运行上述两行时,一切正常,output1.txt正在创建中


你能帮我做这个吗

在执行下一个进程之前,您需要等待第一个进程完成

Process p = Runtime.getRuntime().exec("javac ...");
p.waitFor();
p = Runtime.getRuntime().exec("java ...");
p.waitFor();
试试这个代码

    Process proc = null;
    try {
        String command = "javac input\\master\\Kajari_G\\MemoryComparison.java";
        // Similarly for this: "java -cp input\\master\\Kajari_G\\ MemoryComparison > output\\output1.txt" also           
        proc = Runtime.getRuntime().exec(new String[] { "/bin/sh"//$NON-NLS-1$
                , "-c", command });//$NON-NLS-1$
        if (proc != null) {
            proc.waitFor();
        }
    } catch (Exception e) {
        //Handle
        return;
    }
编辑 在Windows上,使用**cmd**exe路径而不是/bin/sh。检查**cmd**exe中是否支持-c命令行参数。

您需要使用ProcessBuilder重定向。。。通常,使用Java的ProcessBuilder API是一种很好的做法

以下示例使用修改的工作目录和环境启动流程,并重定向要附加到日志文件的标准输出和错误:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
env.remove("OTHERVAR");
env.put("VAR2", env.get("VAR1") + "suffix");
pb.directory(new File("myDir"));
File log = new File("log");
pb.redirectErrorStream(true);
pb.redirectOutput(Redirect.appendTo(log));
Process p = pb.start();
assert pb.redirectInput() == Redirect.PIPE;
assert pb.redirectOutput().file() == log;
assert p.getInputStream().read() == -1;

空间是需要的,因为它在-cp参数之后。这个命令在命令行中运行正常。@kajarigd Runtime.exec只执行您给定的命令,而不执行元字符和文件重定向。因此,>output/output1.txt没有意义。如果您打算用Java编写批处理文件或shell脚本,除非您学习了基础知识,否则您将很难。但是,当您这样做时,您可能只需要用BAT、sh或perl编写它;builder.redirectOutputnew文件输出\\output1.txt;builder.redirectErrornew Fileoutput\\output1.txt;现在正在创建输出文件,但出现错误:error:无法创建Java虚拟机。错误:发生致命异常。程序将退出。无法识别的选项:-cp input\master\Kajari\u G\memorycomparision builder.start;您可能会将此添加为注释,因为它不是一个完整的答案