- 所有父级接口:
AutoCloseable
,Closeable
,Flushable
,OptionChecker
- 所有已知的子接口:
StandardJavaFileManager
- 所有已知的实现类:
ForwardingJavaFileManager
当构造新的 JavaFileObjects 时,文件管理器必须确定在哪里创建它们。例如,如果文件管理器管理文件系统上的常规文件,它很可能有一个当前/工作目录作为创建或查找文件时的默认位置。可以向文件管理器提供许多关于在何处创建文件的提示。任何文件管理器都可能选择忽略这些提示。
此接口中的某些方法使用类名。此类类名必须以完全限定类名和接口名的 Java 虚拟机内部形式给出。为了方便 '。'和'/'可以互换。内部形式在第四章定义Java 虚拟机规范.
讨论:这意味着名称“java/lang.package-info”、“java/lang/package-info”、“java.lang.package-info”是有效且等效的。与中定义的二进制名称进行比较Java 语言规范,第 13.1 节“二进制的形式”。
名字的大小写很重要。所有名称都应区分大小写。例如,某些文件系统具有不区分大小写、区分大小写的文件名。代表此类文件的文件对象应注意使用 File.getCanonicalFile()
或类似方式来保留大小写。如果系统不区分大小写,则文件对象必须使用其他方式来保留大小写。
Relative names: 此接口中的某些方法使用相对名称。相对名称是由“/”分隔的非空、非空路径段序列。 '.'或 '..' 是无效的路径段。有效的相对名称必须匹配 RFC 3986 的“无根路径”规则,第 3.3 节。非正式地,这应该是真的:
此接口中的所有方法都可能抛出 SecurityException。
该接口的对象不需要支持多线程访问,即同步。但是,它必须支持并发访问由此对象创建的不同文件对象。
Implementation note: 此要求的结果是输出到 JarOutputStream 的简单实现不足以实现。也就是说,不是创建直接返回 JarOutputStream 的 JavaFileObject,而是必须缓存内容直到关闭,然后写入 JarOutputStream。
除非明确允许,否则如果给定 null
参数,此接口中的所有方法都可能抛出 NullPointerException。
- 自从:
- 1.6
- 参见:
-
内部类总结
内部类 -
方法总结
修饰符和类型方法描述void
close()
释放此文件管理器直接或间接打开的任何资源。default boolean
contains
(JavaFileManager.Location location, FileObject fo) 确定给定文件对象是否“包含在”指定位置。void
flush()
直接或间接刷新此文件管理器为输出打开的任何资源。getClassLoader
(JavaFileManager.Location location) 返回一个类加载器,用于从给定的面向包的位置加载插件。getFileForInput
(JavaFileManager.Location location, String packageName, String relativeName) getFileForOutput
(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) default FileObject
getFileForOutputForOriginatingFiles
(JavaFileManager.Location location, String packageName, String relativeName, FileObject... originatingFiles) getJavaFileForInput
(JavaFileManager.Location location, String className, JavaFileObject.Kind kind) 返回一个 文件对象 用于表示给定面向包位置中指定种类的指定类的输入。getJavaFileForOutput
(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject sibling) 为输出返回一个 文件对象,表示给定的面向包的位置中指定种类的指定类。default JavaFileObject
getJavaFileForOutputForOriginatingFiles
(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject... originatingFiles) 为输出返回一个 文件对象,表示给定的面向包的位置中指定种类的指定类。default JavaFileManager.Location
getLocationForModule
(JavaFileManager.Location location, String moduleName) 获取某个位置中命名模块的位置,该位置可以是面向模块的位置或输出位置。default JavaFileManager.Location
getLocationForModule
(JavaFileManager.Location location, JavaFileObject fo) 获取包含要在某个位置中找到的特定文件的模块的位置,该位置可以是面向模块的位置或输出位置。default <S> ServiceLoader<S>
getServiceLoader
(JavaFileManager.Location location, Class<S> service) 从给定位置获取特定服务类的服务加载器。boolean
handleOption
(String current, Iterator<String> remaining) 处理一个选项。boolean
hasLocation
(JavaFileManager.Location location) 确定此文件管理器是否知道某个位置。inferBinaryName
(JavaFileManager.Location location, JavaFileObject file) 根据面向包的位置推断文件对象的二进制名称。default String
inferModuleName
(JavaFileManager.Location location) 从getLocationForModule
或listModuleLocations
返回的位置推断模块的名称。boolean
isSameFile
(FileObject a, FileObject b) 比较两个文件对象,如果它们表示相同的底层对象则返回 true。list
(JavaFileManager.Location location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) 在给定的面向包的位置列出与给定条件匹配的所有文件对象。default Iterable<Set<JavaFileManager.Location>>
列出面向模块的位置或输出位置中所有模块的位置。在接口 javax.tools.OptionChecker 中声明的方法
isSupportedOption
-
方法详情
-
getClassLoader
返回一个类加载器,用于从给定的面向包的位置加载插件。例如,要加载注解处理器,编译器会为ANNOTATION_PROCESSOR_PATH
位置请求一个类加载器。- 参数:
location
- 一个位置- 返回:
-
给定位置的类加载器;或
null
如果从给定位置加载插件被禁用或位置未知 - 抛出:
SecurityException
- 如果无法在当前安全上下文中创建类加载器IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器IllegalArgumentException
- 如果位置是面向模块的位置
-
list
Iterable <JavaFileObject > list(JavaFileManager.Location location, String packageName, Set <JavaFileObject.Kind > kinds, boolean recurse) throws IOException 在给定的面向包的位置列出与给定条件匹配的所有文件对象。如果 recurse 为真,则列出“子包”中的文件对象。注意:即使这个文件管理器不知道给定的位置,它也可能不会返回
null
。此外,未知位置可能不会导致异常。- 参数:
location
- 一个位置packageName
- 包名kinds
- 仅返回这些类型的对象recurse
- 如果为真,则包含“子包”- 返回:
- 符合给定条件的文件对象的 Iterable
- 抛出:
IOException
- 如果发生 I/O 错误,或者如果调用了close()
并且无法重新打开此文件管理器IllegalArgumentException
- 如果位置是面向模块的位置IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器
-
inferBinaryName
根据面向包的位置推断文件对象的二进制名称。返回的二进制名称可能不是有效的二进制名称Java 语言规范.- 参数:
location
- 一个位置file
- 文件对象- 返回:
-
二进制名称或
null
在给定位置找不到文件对象 - 抛出:
IllegalArgumentException
- 如果位置是面向模块的位置IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器
-
isSameFile
比较两个文件对象,如果它们表示相同的底层对象则返回 true。- 参数:
a
- 文件对象b
- 文件对象- 返回:
- 如果给定的文件对象表示相同的底层对象,则为真
- 抛出:
IllegalArgumentException
- 如果任一参数是使用另一个文件管理器创建的,并且该文件管理器不支持外部文件对象
-
handleOption
处理一个选项。如果current
是此文件管理器的一个选项,它将使用来自remaining
的该选项的任何参数并返回 true,否则返回 false。- 参数:
current
- 当前选项remaining
- 剩余选项- 返回:
- 如果此文件管理器处理此选项,则为 true,否则为 false
- 抛出:
IllegalArgumentException
- 如果此文件管理器的此选项使用不当IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器
-
hasLocation
确定此文件管理器是否知道某个位置。- 参数:
location
- 一个位置- 返回:
- 如果位置已知则为真
-
getJavaFileForInput
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()
并且无法重新打开此文件管理器
-
getJavaFileForOutput
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()
已调用,无法重新打开此文件管理器
-
getJavaFileForOutputForOriginatingFiles
default JavaFileObject getJavaFileForOutputForOriginatingFiles(JavaFileManager.Location location, String className, JavaFileObject.Kind kind, FileObject ... originatingFiles) throws IOException 为输出返回一个 文件对象,表示给定的面向包的位置中指定种类的指定类。提供的
originatingFiles
表示以未指定的方式用于创建由此方法创建的文件的内容的文件。请参阅Filer.createSourceFile(java.lang.CharSequence, javax.lang.model.element.Element...)
中的originatingElements
。Elements.getFileObjectOf(javax.lang.model.element.Element)
可用于将Element
s 转换为FileObject
s。- 实现要求:
-
默认实现使用
originatingFiles
的第一个元素(如果有)作为sibling
调用getJavaFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, javax.tools.JavaFileObject.Kind, javax.tools.FileObject)
。 - 参数:
location
- 面向包的位置className
- 类的名称kind
- 文件类型,必须是SOURCE
或CLASS
之一originatingFiles
- 对这个新创建的文件有贡献的文件;null
相当于空的originatingFiles
,意味着没有已知的原始文件- 返回:
- 用于输出的文件对象
- 抛出:
IllegalArgumentException
- 如果此文件管理器不知道同级,或者如果此文件管理器不知道位置并且文件管理器不支持未知位置,或者类型无效,或者位置不是输出位置IOException
- 如果发生 I/O 错误,或者如果调用了close()
并且无法重新打开此文件管理器IllegalStateException
-close()
已调用,无法重新打开此文件管理器- 自从:
- 18
- 参见:
-
getFileForInput
FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException 为输入返回一个 文件对象,代表给定面向包位置的指定包中的指定 相对名称。如果返回的对象表示 source 或 类 文件,则它必须是
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"
的文件对象。- 参数:
location
- 面向包的位置packageName
- 包名relativeName
- 相对名称- 返回:
-
文件对象,如果文件不存在,可能返回
null
- 抛出:
IllegalArgumentException
- 如果此文件管理器不知道该位置并且文件管理器不支持未知位置,或者relativeName
无效,或者该位置是面向模块的位置IOException
- 如果发生 I/O 错误,或者如果调用了close()
并且无法重新打开此文件管理器IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器
-
getFileForOutput
FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException 为输出返回一个 文件对象,表示给定位置的指定包中的指定 相对名称。可选地,此文件管理器可能会将同级视为放置输出的提示。此提示的确切语义未指定。例如,JDK 编译器 javac 会将类文件放在与原始源文件相同的目录中,除非提供了类文件输出目录。为了促进此行为,javac 可能会在调用此方法时将原始源文件作为同级文件提供。
如果返回的对象表示 source 或 类 文件,则它必须是
JavaFileObject
的实例。非正式地,此方法返回的文件对象位于位置、包名称和相对名称的串联中,或者位于同级参数的旁边。有关示例,请参见
getFileForInput
。- 参数:
location
- 输出位置packageName
- 包名relativeName
- 相对名称sibling
- 用作放置提示的文件对象;可能是null
- 返回:
- 文件对象
- 抛出:
IllegalArgumentException
- 如果此文件管理器不知道同级,或者如果此文件管理器不知道该位置并且文件管理器不支持未知位置,或者如果relativeName
无效,或者如果该位置不是输出位置IOException
- 如果发生 I/O 错误,或者如果调用了close()
并且无法重新打开此文件管理器IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器
-
getFileForOutputForOriginatingFiles
default FileObject getFileForOutputForOriginatingFiles(JavaFileManager.Location location, String packageName, String relativeName, FileObject ... originatingFiles) throws IOException 为输出返回一个 文件对象,表示给定位置的指定包中的指定 相对名称。提供的
originatingFiles
表示以未指定的方式用于创建由此方法创建的文件的内容的文件。请参阅Filer.createResource(javax.tools.JavaFileManager.Location, java.lang.CharSequence, java.lang.CharSequence, javax.lang.model.element.Element...)
中的originatingElements
。Elements.getFileObjectOf(javax.lang.model.element.Element)
可用于将Element
s 转换为FileObject
s。如果返回的对象表示 source 或 类 文件,则它必须是
JavaFileObject
的实例。非正式地,此方法返回的文件对象位于位置、包名称和相对名称的串联中,或者位于从
originatingFiles
推断的位置中。有关示例,请参见getFileForInput
。- 实现要求:
-
默认实现使用
originatingFiles
的第一个元素调用getFileForOutput(javax.tools.JavaFileManager.Location, java.lang.String, java.lang.String, javax.tools.FileObject)
,如果有的话,作为sibling
。 - 参数:
location
- 输出位置packageName
- 包名relativeName
- 相对名称originatingFiles
- 对这个新创建的文件有贡献的文件;null
相当于空的originatingFiles
,意味着没有已知的原始文件- 返回:
- 文件对象
- 抛出:
IllegalArgumentException
- 如果此文件管理器不知道同级,或者如果此文件管理器不知道该位置并且文件管理器不支持未知位置,或者如果relativeName
无效,或者如果该位置不是输出位置IOException
- 如果发生 I/O 错误,或者如果调用了close()
并且无法重新打开此文件管理器IllegalStateException
- 如果调用了close()
并且无法重新打开此文件管理器- 自从:
- 18
- 参见:
-
flush
直接或间接刷新此文件管理器为输出打开的任何资源。刷新关闭的文件管理器没有任何效果。- 指定者:
flush
在接口Flushable
中- 抛出:
IOException
- 如果发生 I/O 错误- 参见:
-
close
释放此文件管理器直接或间接打开的任何资源。这可能会使该文件管理器变得无用,并且除非明确允许,否则对该对象或通过该对象获得的任何对象的后续调用的影响是未定义的。但是,关闭一个已经关闭的文件管理器没有任何效果。- 指定者:
close
在接口AutoCloseable
中- 指定者:
close
在接口Closeable
中- 抛出:
IOException
- 如果发生 I/O 错误- 参见:
-
getLocationForModule
default JavaFileManager.Location getLocationForModule(JavaFileManager.Location location, String moduleName) throws IOException 获取某个位置中命名模块的位置,该位置可以是面向模块的位置或输出位置。如果给定位置是输出位置,则结果将是输出位置,否则它将是面向包的位置。- 实现要求:
-
此实现抛出
UnsupportedOperationException
。 - 参数:
location
- 面向模块的位置moduleName
- 要查找的模块的名称- 返回:
- 命名模块的位置
- 抛出:
IOException
- 如果发生 I/O 错误UnsupportedOperationException
- 如果此文件管理器不支持此操作IllegalArgumentException
- 如果位置既不是输出位置也不是面向模块的位置- 自从:
- 9
-
getLocationForModule
default JavaFileManager.Location getLocationForModule(JavaFileManager.Location location, JavaFileObject fo) throws IOException 获取包含要在某个位置中找到的特定文件的模块的位置,该位置可以是面向模块的位置或输出位置。如果给定位置是输出位置,则结果将是输出位置,否则它将是面向包的位置。- 实现要求:
-
此实现抛出
UnsupportedOperationException
。 - 参数:
location
- 面向模块的位置fo
- 文件- 返回:
- 包含文件的模块
- 抛出:
IOException
- 如果发生 I/O 错误UnsupportedOperationException
- 如果此文件管理器不支持此操作IllegalArgumentException
- 如果位置既不是输出位置也不是面向模块的位置- 自从:
- 9
-
getServiceLoader
default <S> ServiceLoader <S> getServiceLoader(JavaFileManager.Location location, Class <S> service) throws IOException 从给定位置获取特定服务类的服务加载器。如果位置是面向模块的位置,服务加载器将使用在该位置找到的模块中的服务声明。否则,将使用面向包的位置创建服务加载器,在这种情况下,服务将使用META-INF/services
中的提供者配置文件来确定。- 实现要求:
-
此实现抛出
UnsupportedOperationException
。 - 类型参数:
S
- 服务等级- 参数:
location
- 面向模块的位置service
- 服务类的Class
对象- 返回:
- 给定服务类的服务加载器
- 抛出:
IOException
- 如果发生 I/O 错误UnsupportedOperationException
- 如果此文件管理器不支持此操作- 自从:
- 9
-
inferModuleName
从getLocationForModule
或listModuleLocations
返回的位置推断模块的名称。- 实现要求:
-
此实现抛出
UnsupportedOperationException
。 - 参数:
location
- 代表模块的面向包的位置- 返回:
- 模块的名称
- 抛出:
IOException
- 如果发生 I/O 错误UnsupportedOperationException
- 如果此文件管理器不支持此操作IllegalArgumentException
- 如果此文件管理器不知道该位置- 自从:
- 9
-
listLocationsForModules
default Iterable <Set <JavaFileManager.Location >> listLocationsForModules(JavaFileManager.Location location) throws IOException 列出面向模块的位置或输出位置中所有模块的位置。如果给定位置是输出,则返回的位置将是输出位置,否则它将是面向包的位置。- 实现要求:
-
此实现抛出
UnsupportedOperationException
。 - 参数:
location
- 列出模块的面向模块的位置- 返回:
- 一系列包含模块的位置集
- 抛出:
IOException
- 如果发生 I/O 错误UnsupportedOperationException
- 如果此文件管理器不支持此操作IllegalArgumentException
- 如果位置不是面向模块的位置- 自从:
- 9
-
contains
确定给定文件对象是否“包含在”指定位置。对于面向包的位置,如果存在值,则文件对象包含在该位置中packageName和relativeName这样,以下任一调用都会返回
same
文件对象:getFileForInput(location, packageName, relativeName) getFileForOutput(location, packageName, relativeName, null)
对于面向模块的位置,如果存在可以通过调用获得的模块,则文件对象包含在该位置中:
getLocationForModule(location, moduleName)
- 实现要求:
-
此实现抛出
UnsupportedOperationException
。 - 参数:
location
- 位置fo
- 文件对象- 返回:
- 该文件是否包含在该位置
- 抛出:
IOException
- 如果确定结果有问题UnsupportedOperationException
- 如果不支持该方法- 自从:
- 9
-