Как скомпилировать и запустить файл Java и C из кода Java? - PullRequest
4 голосов
/ 25 января 2012

Я работаю над приложением Editor, в котором я могу скомпилировать и запустить файлы 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. Но все время я получаюnull из InputStreams (оба getErrorStream () и getInputStream ()).

void compileJavaFile(String fileName)
    {
        String compileFileCommand = "javac " + fileName;
        try
        {
            System.out.println("Executing Java File");

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

            String line = "";
            BufferedReader bri = new BufferedReader(new InputStreamReader(compileProcess.getInputStream()));
            BufferedReader bre = new BufferedReader(new InputStreamReader(compileProcess.getErrorStream()));
            while ((line = bri.readLine()) != null)
            {
                System.out.println(line);
            }
            bri.close();
            while ((line = bre.readLine()) != null)
            {
                System.out.println(line);
            }
            bre.close();
            compileProcess.waitFor();
            System.out.println("Done.");
        } catch (Exception e)
        {
            // TODO: handle exception
            System.out.println("Exception ");
            System.out.println(e.getMessage());
        }
    }

    void runJavaFile(String fileName)
    {
        String runFileCommand = "java " + fileName.split(".java")[0];
        try
        {
            System.out.println("runFileCommand : " + runFileCommand);
            System.out.println("Running Java File");

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

            BufferedReader reader = new BufferedReader(new InputStreamReader(runProcess.getInputStream()));
            String line = reader.readLine();
            System.out.println("line = " + line);
            while (line != null)
            {
                System.out.println(line);
                line = reader.readLine();
            }

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

А для 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

Пожалуйста, дайте мне решениеза мои проблемы ..

Ответы [ 2 ]

1 голос
/ 27 октября 2012

заменить строку

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

на

String runFileCommand = "./a.out";
1 голос
/ 25 января 2012

Пожалуйста, попробуйте следующее,

Process p = Runtime.getRuntime().exec(command);

- это строка, которую вы передаете.в команде вы можете передать «javac Test.java» для компиляции вашего java-файла и точно так же вы можете использовать другие команды.

...