Runtime.getRuntime().exec 中的命令不起作用

kaj*_*igd 0 java command-line javac

我有一个名为的java文件MemoryComparison.java保存在文件夹中D:\Documents\CodeAnalysis\project_analysis_RG\CodeAnalysis\input\master\Kajari_G

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

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

现在,我正在从另一个名为 的 java 程序编译并执行上述 java 程序ReadFilesInFolders.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();
     }
Run Code Online (Sandbox Code Playgroud)

现在,第一个 exec 工作正常,并且 .class 文件正在 MemoryComparison.java 所在的同一文件夹中生成。但似乎第二个执行程序无法工作,因为没有创建output1.txt。

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

你能帮我解决这个问题吗?

Cha*_*G K 5

试试这个代码。

    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;
    }
Run Code Online (Sandbox Code Playgroud)

编辑

在 Windows 上使用**cmd** exe路径而不是/bin/sh. **cmd** exe检查.c中是否支持-c命令行参数