我在网上找到了这段关于JavaCompiler 的代码
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null,
"src/org/kodejava/example/tools/Hello.java");
对于compiler.run(null, null, null
,它说这三个null分别是默认的System.in
、System.out
和System.err
。但是,当我找不到这些值的API时,这些值的实际作用是什么?有人能解释一下吗?
Javadoc就在这里。
int run(InputStream in,OutputStream输出,OutputStream错误,一串自变量)
使用给定的I/O通道和参数运行该工具。按照惯例,工具返回0表示成功,返回非零表示错误。任何生成的诊断将被写入out或err-in未指定的格式。
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启动时由操作系统设置的。您可以将它们管道传输到文件,也可以将它们直接写入(读取)控制台。
在这种情况下,您将使用参数来检查程序的编译器输出(而不仅仅是将其发送给用户)。这就是"以某种未指定格式编写的诊断"的作用所在。
您可以指定自己的流,而不是依赖于标准的系统流。例如,如果您想将输出重定向到某个文件,可以创建file输出流,并传递给#run调用。
JavaCompiler是javax.tools.JavaCompiler,它实现了javax.tools.Tool接口,请参阅javadoc了解java.tools.Tool#run方法。