如何编制,;从java代码运行java和C文件?

如何编制,;从java代码运行java和C文件?,java,compilation,Java,Compilation,我正在开发一个编辑器应用程序,在这里我可以编译和运行c、cpp和Java文件。我正在使用Java编程语言开发这个应用程序。我正在Eclipse中开发它。 我能够在特定位置创建新文件(c、cpp和java),也能够将文件保存到不同的位置。 对于执行,我使用以下方法 String compileFileCommand = "javac "+fileName; Process compile_process = new ProcessBuilder(compileFileCommand).redir

我正在开发一个编辑器应用程序,在这里我可以编译和运行c、cpp和Java文件。我正在使用Java编程语言开发这个应用程序。我正在Eclipse中开发它。 我能够在特定位置创建新文件(c、cpp和java),也能够将文件保存到不同的位置。 对于执行,我使用以下方法

String compileFileCommand = "javac "+fileName;

Process compile_process = new ProcessBuilder(compileFileCommand).redirectErrorStream(true).start();
compile_process.waitFor();

BufferedReader reader=new BufferedReader(new InputStreamReader(compile_process.getInputStream())); 
String line=reader.readLine(); 
while(line!=null) { 
    System.out.println(line); 
    line=reader.readLine(); 
} 
我的问题是,我无法从相应的位置编译文件

总是破例

java.io.IOException: error=2, No such file or directory 
请告诉我如何编译和运行所有的C、C++和java文件。 对于我的申请,请给我任何其他建议

编辑。。 我使用了这两种方法进行编译和运行。编译时,它会在Java中创建一个类文件。但我一直从InputStreams(getErrorStream()和getInputStream()中获取null)

和C和C++我使用。

void compileCFile(String fileName)
    {
        String compileFileCommand = "gcc " + fileName;

        resultString = "";
        try
        {
            System.out.println("Compiling C File");

            Process processCompile = Runtime.getRuntime().exec(compileFileCommand);

            BufferedReader brCompileError = new BufferedReader(new InputStreamReader(processCompile.getErrorStream()));
            String errorCompile = brCompileError.readLine();
            if (errorCompile != null)
                System.out.println("Error Compiler = " + errorCompile);

            resultString += errorCompile +"\n";

            BufferedReader brCompileRun = new BufferedReader(new InputStreamReader(processCompile.getErrorStream()));
            String outputCompile = brCompileRun.readLine();
            if (outputCompile != null)
                System.out.println("Output Compiler = " + outputCompile);

            resultString += outputCompile +"\n";

        } catch (Exception e)
        {
            // TODO: handle exception
            System.out.println("Exception ");
            System.out.println(e.getMessage());
        }
    }

    void runCFile(String fileName)
    {
        String runFileCommand = "./" + fileName.split(".c")[0];

        try
        {

            System.out.println("Running C File");

            Process processRun = Runtime.getRuntime().exec(runFileCommand);

            BufferedReader brRun = new BufferedReader(new InputStreamReader(processRun.getErrorStream()));
            String errorRun = brRun.readLine();
            if (errorRun != null)
                System.out.println("Error Run = " + errorRun);

            BufferedReader brResult = new BufferedReader(new InputStreamReader(processRun.getInputStream()));
            String outputRun = brResult.readLine();
            if (outputRun != null)
                System.out.println("Output Run = " + outputRun);

        } catch (Exception e)
        {
            // TODO: handle exception
            System.out.println("Exception ");
            System.out.println(e.getMessage());
        }
    }

    void compileCPPFile(String fileName)
    {
        String compileFileCommand = "g++ " + fileName;
        try
        {

            System.out.println("Compiling CPP File");

            Process processCompile = Runtime.getRuntime().exec(compileFileCommand);

            BufferedReader brCompileError = new BufferedReader(new InputStreamReader(processCompile.getErrorStream()));
            String errorCompile = brCompileError.readLine();
            if (errorCompile != null)
                System.out.println("Error Compiler = " + errorCompile);

            resultString += errorCompile +"\n";

            BufferedReader brCompileRun = new BufferedReader(new InputStreamReader(processCompile.getErrorStream()));
            String outputCompile = brCompileRun.readLine();
            if (outputCompile != null)
                System.out.println("Output Compiler = " + outputCompile);

            resultString += outputCompile +"\n";

        } catch (Exception e)
        {
            // TODO: handle exception
            System.out.println("Exception ");
            System.out.println(e.getMessage());
        }
    }

    void runCPPFile(String fileName)
    {
        String runFileCommand = "./" + fileName.split(".cpp")[0];

        try
        {
            System.out.println("Running CPP File");

            Process processRun = Runtime.getRuntime().exec(runFileCommand);

            BufferedReader brRun = new BufferedReader(new InputStreamReader(processRun.getErrorStream()));
            String errorRun = brRun.readLine();
            if (errorRun != null)
                System.out.println("Error Run = " + errorRun);

            BufferedReader brResult = new BufferedReader(new InputStreamReader(processRun.getInputStream()));
            String outputRun = brResult.readLine();
            if (outputRun != null)
                System.out.println("Output Run = " + outputRun);

        } catch (Exception e)
        {
            // TODO: handle exception
            System.out.println("Exception ");
            System.out.println(e.getMessage());
        }
    }
在C++和C++的情况下,它显示出类似

的错误。
g++: /media/disk/eclipse/\/UniversalIDE/CPP/firstCPP: No such file or directory
请为我的问题提供解决方案。

请尝试以下内容

Process p = Runtime.getRuntime().exec(command);
命令是您传递的字符串。在命令中,您可以通过“javactest.java”来编译java文件&就像您可以使用其他命令一样。

替换该行

String runFileCommand = "./" + fileName.split(".c")[0];


两个问题:(1)哪个代码行引发该异常?(2) 您确定可以找到
javac
吗?在新的ProcessBuilder(…)上引发异常。请尽你所能提出任何建议。这一行实际上有三条陈述。因此,有必要确切地找出哪一个抛出异常。另外(根据我上面的第二个问题),您确定可以找到
javac
?很可能这是找不到的。尝试将
compileFileCommand
更改为just
javac
,看看会发生什么。它会从我指定的任何目录编译吗?是的。但是您需要正确地给出Dir路径。如果答案对你有用,请接受。好的,对于Java来说,它是从任何目录编译的,并且还创建了一个类文件。但是它给出了null作为响应。当我使用String line=“”;BufferedReader bri=新的BufferedReader(新的InputStreamReader(compileProcess.getInputStream());BufferedReader bre=新的BufferedReader(新的InputStreamReader(compileProcess.getErrorStream());而((line=bri.readLine())!=null){System.out.println(line);}bri.close();虽然((line=bre.readLine())!=null){System.out.println(line);}我认为在这一行之后您需要睡眠进程compileProcess=Runtime.getRuntime().exec(compileFileCommand)@我的案例文件中的Lucifer已编译但未运行。看见
String runFileCommand = "./" + fileName.split(".c")[0];
String runFileCommand = "./a.out";