如何编制,;从java代码运行java和C文件?
我正在开发一个编辑器应用程序,在这里我可以编译和运行c、cpp和Java文件。我正在使用Java编程语言开发这个应用程序。我正在Eclipse中开发它。 我能够在特定位置创建新文件(c、cpp和java),也能够将文件保存到不同的位置。 对于执行,我使用以下方法如何编制,;从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
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
更改为justjavac
,看看会发生什么。它会从我指定的任何目录编译吗?是的。但是您需要正确地给出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";