2012-01-25 14 views
1

私は、c、cpp、Javaファイルをコンパイルして実行できるエディタアプリケーションを開発中です。このアプリケーションは、Javaプログラミング言語を使用して開発しています。Eclipseで開発しています。 特定の場所に新しいファイル(c、cpp、java)を作成することができます。また、別の場所にファイルを保存することもできます。 実行のために私は以下の方法を使用しています。JavaコードからJavaとCファイルをコンパイル&実行するには?

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ファイルを与えます。 私の申請について他にも提案してください。

編集済み 私はこの2つのメソッドをコンパイルして実行するために使用しました。Javaの場合はコンパイルするとクラスファイルが作成されますが、常に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++を使用しています。それは私に私の問題に対する解決策を教えてください

g++: /media/disk/eclipse/\/UniversalIDE/CPP/firstCPP: No such file or directory 

のようなエラーが表示さ

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()); 
     } 
    } 

++ ..

+0

二つの質問に沿っ

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

置き換える:(1)コードの行は、その例外をスローしましたか? (2) 'javac'が見つかりましたか? –

+0

新しいProcessBuilder(...)で例外がスローされます。あなたができることを何でも提案してください。 – AB1209

+0

その行には実際には3つのステートメントがあります。したがって、これらのどれが例外をスローするかを正確に調べることは価値があります。また、(上記の2番目の質問によると) 'javac'が見つかりましたか?これが見つからないことが非常にうまくいくかもしれません。 'compileFileCommand'を' javac'だけに変えてみて、何が起こるのか見てみてください。 –

答えて

3

次試してみてください、

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

コマンドされますあなたが渡す文字列。あなたはjavaファイル&をコンパイルするために "javac Test.java"を渡すことができます。他のコマンドを使うことができます。

+0

指定したディレクトリからコンパイルできますか? – AB1209

+0

はい。しかし、あなたはDirパスを適切に与える必要があります。それがあなたに役立つ場合は、その答えを受け入れてください。他の人にも役立つようになります。 – Lucifer

+0

[OK]をJavaの場合は、任意のDirからコンパイルしてクラスファイルを作成します。 \t \t \t BufferedReader bri =新しいBufferedReader(新しいInputStreamReader(compileProcess.getInputStream())); \t \t \t BufferedReader bre = new BufferedReader(新しいInputStreamReader(compileProcess。getErrorStream())); \t \t \t一方((ライン= bri.readLine())!= NULL) \t \t \t { \t \t \t \tのSystem.out.println(ライン) (3535) \t \t \t一方((ライン= bre.readLine())!= NULL) \t \t \t { \t \t \t \tのSystem.out.println(ライン) \t \t \t} – AB1209

1

String runFileCommand = "./a.out"; 
関連する問題