Java编译器run()方法
我在网上找到了这段关于JavaCompiler的代码Java编译器run()方法,java,api,compiler-construction,compilation,java-compiler-api,Java,Api,Compiler Construction,Compilation,Java Compiler Api,我在网上找到了这段关于JavaCompiler的代码 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); int result = compiler.run(null, null, null, "src/org/kodejava/example/tools/Hello.java"); 对于编译器.run(null,null,null,这三个null分别是默认的System.in,System.ou
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null,
"src/org/kodejava/example/tools/Hello.java");
对于编译器.run(null,null,null
,这三个null分别是默认的System.in
,System.out
和System.err
。但是,当我找不到它们的API时,这些值实际上做了什么?有人能解释一下吗?Javadoc是
int run(输入流输入,
输出流输出,
输出流错误,
字符串…参数)
使用给定的I/O通道和参数运行该工具。按照惯例,工具返回0表示成功,返回非零表示错误。任何
在某些情况下,生成的诊断将写入out或err
未指定格式
Parameters:
in - "standard" input; use System.in if null
out - "standard" output; use System.out if null
err - "standard" error; use System.err if null
arguments - arguments to pass to the tool
Returns:
0 for success; nonzero otherwise
至于System.in、System.out和System.err,它们是(默认情况下)连接到STDIN、STDERR和STDOUT的全局流。这三个流是在JVM启动时由操作系统设置的。您可以通过管道将它们传输到文件,或者它们只是写入(读取)控制台
在这种情况下,您可以使用参数检查程序的编译器输出(而不仅仅是将其发送给用户)。这就是“诊断以某种未指定的格式写入”的地方进来。您可以指定自己的流,而不是依赖标准系统流。例如,如果您想将输出重定向到某个文件,您可以创建文件输出流,并传递到#运行调用。JavaCompiler是javax.tools.JavaCompiler,它实现了javax.tools.Tool接口,请参阅rjavax.tools.Tool#run方法