我在网上找到了这段关于JavaCompiler的代码
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null,
"src/org/kodejava/example/tools/Hello.java");
并且它表示对于
compiler.run(null, null, null
,这三个空值分别是默认的 System.in
、System.out
和 System.err
。但是,由于我找不到这些值的 API,这些值实际上有什么作用呢?有人可以解释一下吗?
Javadoc 位于这里。
int run(输入流中, 输出流输出, 输出流错误, 字符串...参数)
使用给定的 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启动时设置的。您可以将它们通过管道传输到文件,或者它们只是写入(读取)控制台。
在这种情况下,您将使用参数来检查程序的编译器输出(而不是仅仅将其发送给用户)。这就是“以某种未指定的格式写出的诊断”的用武之地。
您可以指定自己的流,而不是依赖标准系统流。例如,如果您想将输出重定向到某个文件,您可以创建文件输出流,然后传递给 #run 调用。
JavaCompiler 是 javax.tools.JavaCompiler 并且它实现了 javax.tools.Tool 接口,请参阅 javadoc 以了解 javax.tools.Tool#run 方法。