所有超级接口:Closeable, Flushable, OptionChecker
所有已知子接口:StandardJavaFileManager
所有已知实现类:ForwardingJavaFileManager
在 Java™ 编程语言源和类文件之上进行操作的工具的文件管理器。在这里,文件 是指常规文件和其他数据源的抽象。
构建新的 JavaFileObject 时,文件管理器必须确定创建它们的位置。例如,如果文件管理器在文件系统上管理常规文件,那么在创建或查找文件时,此文件管理器很可能将当前/工作目录作为默认位置使用。可以向文件管理器提供许多关于在何处创建文件的提示。文件管理器可以选择忽略这些提示。
此接口中的某些方法使用类名称。这种类名称必须以完全限定类和接口名称的 Java Virtual Machine 内部形式给定。为了方便起见,'.' 和 '/' 可以互换使用。在 Java Virtual Machine Specification 第四章中定义了内部形式。
在 Java™ 编程语言源和类文件之上进行操作的工具的文件管理器。在这里,文件 是指常规文件和其他数据源的抽象。
构建新的 JavaFileObject 时,文件管理器必须确定创建它们的位置。例如,如果文件管理器在文件系统上管理常规文件,那么在创建或查找文件时,此文件管理器很可能将当前/工作目录作为默认位置使用。可以向文件管理器提供许多关于在何处创建文件的提示。文件管理器可以选择忽略这些提示。
此接口中的某些方法使用类名称。这种类名称必须以完全限定类和接口名称的 Java Virtual Machine 内部形式给定。为了方便起见,'.' 和 '/' 可以互换使用。在 Java Virtual Machine Specification 第四章中定义了内部形式。
Provides simple implementations for most methods in JavaFileObject. This class is designed to be subclassed and used as a basis for JavaFileObject implementations. Subclasses can override the implementation and specification of any method of this class as long as the general contract of JavaFileObject is obeyed.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
ClassFileManager fileManager = new ClassFileManager(compiler.getStandardFileManager(diagnostics, null, null));
List<JavaFileObject> jfiles = new ArrayList<JavaFileObject>();
jfiles.add(new CharSequenceJavaFileObject(fullClassName, javaCode));
List<String> options = new ArrayList<String>();
options.add("-encoding");
options.add("UTF-8");
options.add("-classpath");
options.add(this.classpath);
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, options, null, jfiles);
boolean success = task.call();
if (success) {
JavaClassObject jco = fileManager.getJavaClassObject();
DynamicClassLoader dynamicClassLoader = new DynamicClassLoader(this.parentClassLoader);
Class clazz = dynamicClassLoader.loadClass(fullClassName,jco);
instance = clazz.newInstance();
} else {
String error = "";
for (Diagnostic diagnostic : diagnostics.getDiagnostics()) {
error = error + compilePrint(diagnostic);
}
}
没有评论:
发表评论