public interface JavaFileManager extends Closeable, Flushable, OptionChecker
当构建新的JavaFileObjects时,文件管理器必须确定在哪里创建它们。 例如,如果文件管理器管理文件系统上的常规文件,则很有可能在创建或查找文件时使用当前/工作目录作为默认位置。 可以向文件管理器提供关于在哪里创建文件的许多提示。 任何文件管理器可能会选择忽略这些提示。
此接口中的某些方法使用类名。 这些类名必须在Java Virtual Machine内部格式的完全限定类和接口名称中给出。 为了方便 '。' 和'/'是可互换的。 内部形式在The Java™ Virtual Machine Specification的第四章中定义。
Discussion: this means that the names "java/lang.package-info", "java/lang/package-info", "java.lang.package-info", are valid and equivalent. Compare to binary name as defined in The Java™ Language Specification, section 13.1 "The Form of a Binary".
姓名的情况很重要。 所有名称应视为区分大小写。 例如,某些文件系统具有不区分大小写,区分大小写的文件名。 代表这样的文件的文件对象应该使用File.getCanonicalFile()或类似的方法来保护大小写。 如果系统不区分大小写,文件对象必须使用其他方式来保护大小写。
Relative names :这个接口中的一些方法使用相对名称。 相对名称是以“/”分隔的路径段的非空,非空序列。 ''' 或'..'是无效的路径段。 有效的相对名称必须与RFC 3986第3.3节的“无路径”规则相匹配。 非正式地,这应该是真的:
URI.create(relativeName).normalize().getPath().equals(relativeName)
此接口中的所有方法可能会抛出SecurityException异常。
此接口的对象不需要支持多线程访问,即同步。 但是,它必须支持对此对象创建的不同文件对象的并发访问。
实现说明:这个要求的结果是,输出到一个JarOutputStream的一个微不足道的实现不是一个充分的实现。 也就是说,而不是直接创建返回JarOutputStream的JavaFileObject,内容必须缓存直到关闭,然后写入JarOutputStream。
除非明确允许,如果给定了一个null参数,则该接口中的所有方法都可能会抛出null 。
JavaFileObject , FileObject
| Modifier and Type | Interface and Description |
|---|---|
static interface |
JavaFileManager.Location
文件对象的位置接口。
|
isSupportedOptionClassLoader getClassLoader(JavaFileManager.Location location)
ANNOTATION_PROCESSOR_PATH位置请求类加载器。
location - 一个位置
null如果从给定位置加载插件已禁用或位置未知
SecurityException - 如果无法在当前安全上下文中创建类加载器
IllegalStateException - 如果已经调用了
close() ,并且该文件管理器无法重新打开
Iterable<JavaFileObject> list(JavaFileManager.Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) throws IOException
注意:即使给定的位置对于该文件管理器是未知的,它也可能不会返回null 。 而且,未知的位置可能不会引起异常。
location - 一个位置
packageName - 一个包名
kinds - 只返回这些类型的对象
recurse - 如果真的包括“子包”
IOException - 如果发生I / O错误,或者如果
调用了close() ,并且此文件管理器无法重新打开
IllegalStateException - 如果
close()已被调用,并且此文件管理器无法重新打开
String inferBinaryName(JavaFileManager.Location location, JavaFileObject file)
location - 一个位置
file - 一个文件对象
null在给定位置找不到文件对象
IllegalStateException - 如果已经调用了
close() ,并且此文件管理器无法重新打开
boolean isSameFile(FileObject a, FileObject b)
a - 一个文件对象
b - 一个文件对象
IllegalArgumentException - 如果任一参数是使用另一个文件管理器创建的,并且此文件管理器不支持外部文件对象
boolean handleOption(String current, Iterator<String> remaining)
current是该文件管理器的选项, remaining从remaining使用该选项的任何参数,并返回true,否则返回false。
current - 当前选项
remaining - 剩余选项
IllegalArgumentException - 如果此文件管理器的此选项被错误地使用
IllegalStateException - 如果已经调用了
close() ,并且该文件管理器无法重新打开
boolean hasLocation(JavaFileManager.Location location)
location - 一个位置
JavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind) throws IOException
location - 一个位置
className - 一个类的名称
kind - 文件的种类,必须是
SOURCE或
CLASS之一
null
IllegalArgumentException - 如果该文件管理器不知道该位置,并且文件管理器不支持未知位置,或者该类型无效
IOException - 如果发生I / O错误,或者如果
调用了close() ,并且该文件管理器无法重新打开
IllegalStateException - 如果
close()已被调用,并且该文件管理器无法重新打开
JavaFileObject getJavaFileForOutput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling) throws IOException
可选地,该文件管理器可以将兄弟姐妹视为提示放置输出的位置。 这个提示的确切语义是未指定的。 例如,JDK编译器javac将将类文件放置在与源文件源相同的目录中,除非提供了一个类文件输出目录。 为了方便这种行为,javac可以在调用此方法时将起始源文件提供为兄弟。
location - 一个位置
className - 一个类的名称
kind - 文件的种类,必须是
SOURCE或
CLASS之一
sibling - 用作放置提示的文件对象;
可能是null
IllegalArgumentException - 如果此文件管理器不知道同级,或者该文件管理器不知道该位置,并且文件管理器不支持未知位置,或者该类型无效
IOException - 如果发生I / O错误,或者如果
调用了close() ,并且该文件管理器无法重新打开
IllegalStateException -
close() ,这个文件管理器无法重新打开
FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException
如果返回的对象表示一个source或class文件,则它必须是JavaFileObject的一个实例。
非法地,此方法返回的文件对象位于位置,包名称和相对名称的并置中。 例如,要在SOURCE_PATH位置的“com.sun.tools.javac”包中找到属性文件“resources / compiler.properties”,可能会调用此方法:
getFileForInput(SOURCE_PATH, "com.sun.tools.javac", "resources/compiler.properties");
如果调用在Windows上执行,SOURCE_PATH设置为"C:\Documents and Settings\UncleBob\src\share\classes" ,则有效的结果将是表示文件"C:\Documents and Settings\UncleBob\src\share\classes\com\sun\tools\javac\resources\compiler.properties"的文件"C:\Documents and Settings\UncleBob\src\share\classes\com\sun\tools\javac\resources\compiler.properties" 。
location - 一个位置
packageName - 一个包名
relativeName - 相对名称
null
IllegalArgumentException - 如果该文件管理器不知道该位置,并且文件管理器不支持未知位置,或者如果
relativeName无效
IOException - 如果发生I / O错误,或者如果已调用
close() ,并且无法重新打开该文件管理器
IllegalStateException - 如果已经调用了
close() ,并且该文件管理器无法重新打开
FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException
可选地,该文件管理器可以将兄弟姐妹视为提示放置输出的位置。 这个提示的确切语义是未指定的。 例如,JDK编译器javac将将类文件放置在与源文件源相同的目录中,除非提供了一个类文件输出目录。 为了方便这种行为,javac可以在调用此方法时将起始源文件提供为兄弟。
如果返回的对象表示一个source或class文件,则它必须是JavaFileObject的一个实例。
非法地,此方法返回的文件对象位于位置,包名称和相对名称的连接中,或者位于兄弟参数旁边。 见例getFileForInput 。
location - 一个位置
packageName - 一个包名
relativeName - 相对名称
sibling - 用作放置提示的文件对象;
可能是null
IllegalArgumentException - 如果此文件管理器不知道同胞,或者该文件管理器不知道该位置,并且文件管理器不支持未知位置,或者如果
relativeName无效
IOException - 如果发生I / O错误,或者如果已调用
close() ,并且无法重新打开该文件管理器
IllegalStateException - 如果
close()已被调用,并且该文件管理器无法重新打开
void flush()
throws IOException
flush中的
Flushable
IOException - 如果发生I / O错误
close()
void close()
throws IOException
close在界面
AutoCloseable
close在接口
Closeable
IOException - 如果发生I / O错误
flush()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.