- 所有超级接口:
-
AutoCloseable
,Closeable
,Flushable
,JavaFileManager
,OptionChecker
基于
java.io.File
和java.nio.file.Path
的文件管理器。获取此类的实例的常见方式是使用getStandardFileManager,例如:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();此文件管理器创建代表常规文件、zip文件条目或类似文件系统容器中的条目的文件对象。从实现此接口的文件管理器返回的任何文件对象必须遵守以下行为:DiagnosticCollector<JavaFileObject>
diagnostics = newDiagnosticCollector<JavaFileObject>()
; StandardJavaFileManager fm = compiler.getStandardFileManager(diagnostics, null, null);
- 文件名不需要是规范的。
- 对于代表常规文件的文件对象
- 方法
FileObject.delete()
等效于File.delete()
, - 方法
FileObject.getLastModified()
等效于File.lastModified()
, - 如果以下操作成功,则方法
FileObject.getCharContent(boolean)
、FileObject.openInputStream()
和FileObject.openReader(boolean)
必须成功(忽略编码问题):new
FileInputStream
(newFile
(fileObject
.toUri
())) - 如果以下操作成功,则方法
FileObject.openOutputStream()
和FileObject.openWriter()
必须成功(忽略编码问题):new
FileOutputStream
(newFile
(fileObject
.toUri
()))
- 方法
- 从
FileObject.toUri()
返回的URI
file:///C:/Documents%20and%20Settings/UncleBob/BobsApp/Test.java
jar:///C:/Documents%20and%20Settings/UncleBob/lib/vendorA.jar!/com/vendora/LibraryClass.class
file:BobsApp/Test.java
(文件名是相对的并且依赖于当前目录)jar:lib/vendorA.jar!/com/vendora/LibraryClass.class
(路径的前半部分依赖于当前目录,而!后的组件是合法的)Test.java
(此URI依赖于当前目录并且没有模式)jar:///C:/Documents%20and%20Settings/UncleBob/BobsApp/../lib/vendorA.jar!com/vendora/LibraryClass.class
(路径未规范化)
此接口的所有实现必须支持表示默认文件系统中文件的Path对象。建议实现应支持来自任何文件系统的Path对象。
- API注释:
-
此接口上的某些方法接受
Collection<? extends Path>
而不是Iterable<? extends Path>
。这是为了防止意外使用单个Path
调用方法,因为虽然Path
实现了Iterable<Path>
,但几乎永远不会正确地使用单个Path
调用这些方法并将其视为其组件的Iterable
。 - 自:
- 1.6
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic interface
从字符串创建Path
对象的工厂。Nested classes/interfaces declared in interface javax.tools.JavaFileManager
JavaFileManager.Location
-
Method Summary
Modifier and TypeMethodDescriptiondefault Path
asPath
(FileObject file) 返回此文件对象下层的路径(可选操作)。Iterable
<? extends JavaFileObject> getJavaFileObjects
(File... files) 返回代表给定文件的文件对象。Iterable
<? extends JavaFileObject> getJavaFileObjects
(String... names) 返回代表给定文件名的文件对象。default Iterable
<? extends JavaFileObject> getJavaFileObjects
(Path... paths) 返回代表给定路径的文件对象。Iterable
<? extends JavaFileObject> getJavaFileObjectsFromFiles
(Iterable<? extends File> files) 返回代表给定文件的文件对象。default Iterable
<? extends JavaFileObject> getJavaFileObjectsFromPaths
(Iterable<? extends Path> paths) 已弃用。default Iterable
<? extends JavaFileObject> getJavaFileObjectsFromPaths
(Collection<? extends Path> paths) 返回代表给定路径的文件对象。Iterable
<? extends JavaFileObject> 返回代表给定文件名的文件对象。getLocation
(JavaFileManager.Location location) 返回与给定位置关联的搜索路径。getLocationAsPaths
(JavaFileManager.Location location) 返回与给定位置关联的搜索路径。boolean
isSameFile
(FileObject a, FileObject b) 比较两个文件对象,如果它们表示相同的规范文件、zip文件条目或任何基于文件系统的容器中的条目,则返回true。void
setLocation
(JavaFileManager.Location location, Iterable<? extends File> files) 将给定的搜索路径与给定位置关联。default void
setLocationForModule
(JavaFileManager.Location location, String moduleName, Collection<? extends Path> paths) 将给定的搜索路径与给定模块和位置关联,该位置必须是面向模块或输出位置。default void
setLocationFromPaths
(JavaFileManager.Location location, Collection<? extends Path> paths) 将给定的搜索路径与给定位置关联。default void
指定一个工厂,用于从字符串或一系列字符串生成路径。Methods declared in interface javax.tools.JavaFileManager
close, contains, flush, getClassLoader, getFileForInput, getFileForOutput, getFileForOutputForOriginatingFiles, getJavaFileForInput, getJavaFileForOutput, getJavaFileForOutputForOriginatingFiles, getLocationForModule, getLocationForModule, getServiceLoader, handleOption, hasLocation, inferBinaryName, inferModuleName, list, listLocationsForModules
Methods declared in interface javax.tools.OptionChecker
isSupportedOption
-
Method Details
-
isSameFile
比较两个文件对象,如果它们表示相同的规范文件、zip文件条目或任何基于文件系统的容器中的条目,则返回true。- 指定者:
-
isSameFile
在接口JavaFileManager
中 - 参数:
-
a
- 一个文件对象 -
b
- 一个文件对象 - 返回:
- 如果给定的文件对象表示相同的规范文件、zip文件条目或路径,则返回true;否则返回false
- 抛出:
-
IllegalArgumentException
- 如果任一参数是使用另一个文件管理器实现创建的
-
getJavaFileObjectsFromFiles
返回代表给定文件的文件对象。- 参数:
-
files
- 文件列表 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果文件列表包含目录
-
getJavaFileObjectsFromPaths
default Iterable<? extends JavaFileObject> getJavaFileObjectsFromPaths(Collection<? extends Path> paths) 返回代表给定路径的文件对象。- 实现要求:
-
默认实现延迟将每个路径转换为文件并调用
getJavaFileObjectsFromFiles
。如果在转换发生时任何路径无法转换为文件,则将抛出IllegalArgumentException
。 - 参数:
-
paths
- 路径列表 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果路径列表包含目录或者如果此文件管理器不支持给定的任何路径 - 自:
- 13
-
getJavaFileObjectsFromPaths
@Deprecated(since="13") default Iterable<? extends JavaFileObject> getJavaFileObjectsFromPaths(Iterable<? extends Path> paths) Deprecated.usegetJavaFileObjectsFromPaths(Collection)
instead, to prevent the possibility of accidentally calling the method with a singlePath
as such an argument. AlthoughPath
implementsIterable<Path>
, it would almost never be correct to pass a singlePath
and have it be treated as anIterable
of its components.返回代表给定路径的文件对象。- 实现要求:
-
默认实现会延迟将每个路径转换为文件,并调用
getJavaFileObjectsFromPaths
。如果在转换发生时任何路径无法转换为文件,则会抛出IllegalArgumentException
。 - 参数:
-
paths
- 路径列表 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果路径列表包含目录,或者如果此文件管理器不支持给定的任何路径。 - 自版本:
- 9
-
getJavaFileObjects
返回表示给定文件的文件对象。方便方法等效于:getJavaFileObjectsFromFiles(
Arrays.asList
(files))- 参数:
-
files
- 文件数组 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果文件数组包含目录,或者如果此文件管理器不支持给定的任何路径 -
NullPointerException
- 如果给定数组包含空元素
-
getJavaFileObjects
返回表示给定路径的文件对象。方便方法等效于:getJavaFileObjectsFromPaths(
Arrays.asList
(paths))- 实现要求:
-
默认实现只会在 getJavaFileObjectsFromPaths(Collection) 抛出
NullPointerException
时才会抛出。 - 参数:
-
paths
- 路径数组 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果文件数组包含目录,或者如果此文件管理器不支持给定的任何路径 -
NullPointerException
- 如果给定数组包含空元素 - 自版本:
- 9
-
getJavaFileObjectsFromStrings
返回表示给定文件名的文件对象。- 参数:
-
names
- 文件名列表 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果文件名列表包含目录
-
getJavaFileObjects
返回表示给定文件名的文件对象。方便方法等效于:getJavaFileObjectsFromStrings(
Arrays.asList
(names))- 参数:
-
names
- 文件名列表 - 返回:
- 文件对象列表
- 抛出:
-
IllegalArgumentException
- 如果文件名数组包含目录 -
NullPointerException
- 如果给定数组包含空元素
-
setLocation
void setLocation(JavaFileManager.Location location, Iterable<? extends File> files) throws IOException 将给定搜索路径与给定位置关联。任何先前的值将被丢弃。如果位置是面向模块或输出位置,则通过 setLocationForModule 设置的任何模块特定关联都将被取消。- 参数:
-
location
- 位置 -
files
- 文件列表,如果为null
,则使用此位置的默认搜索路径 - 抛出:
-
IllegalArgumentException
- 如果location
是输出位置且files
不包含恰好一个元素 -
IOException
- 如果location
是输出位置且不表示现有目录 - 参见:
-
setLocationFromPaths
default void setLocationFromPaths(JavaFileManager.Location location, Collection<? extends Path> paths) throws IOException 将给定搜索路径与给定位置关联。任何先前的值将被丢弃。如果位置是面向模块或输出位置,则通过 setLocationForModule 设置的任何模块特定关联都将被取消。- 实现要求:
-
默认实现会延迟将每个路径转换为文件,并调用
setLocation
。如果在转换发生时任何路径无法转换为文件,则会抛出IllegalArgumentException
。 - 参数:
-
location
- 位置 -
paths
- 路径列表,如果为null
,则使用此位置的默认搜索路径 - 抛出:
-
IllegalArgumentException
- 如果location
是输出位置且paths
不包含恰好一个元素,或者如果此文件管理器不支持给定的任何路径 -
IOException
- 如果location
是输出位置且paths
不表示现有目录 - 自版本:
- 9
- 参见:
-
setLocationForModule
default void setLocationForModule(JavaFileManager.Location location, String moduleName, Collection<? extends Path> paths) throws IOException 将给定搜索路径与给定模块和位置关联,该位置必须是面向模块或输出位置。任何先前的值将被丢弃。这将覆盖从位置本身关联的搜索路径派生的任何默认关联。如果通过调用 setLocation 或 setLocationFromPaths 为位置关联新的搜索路径,则所有这种模块特定关联都将被取消。- 实现要求:
-
默认实现会抛出
UnsupportedOperationException
。 - 参数:
-
location
- 位置 -
moduleName
- 模块名称 -
paths
- 要与位置和模块关联的搜索路径。 - 抛出:
-
IllegalStateException
- 如果位置不是面向模块或输出位置。 -
UnsupportedOperationException
- 如果此文件管理器不支持此操作。 -
IOException
- 如果location
是输出位置且paths
不表示现有目录 - 自版本:
- 9
- 参见:
-
getLocation
返回与给定位置关联的搜索路径。- 参数:
-
location
- 位置 - 返回:
-
文件列表或
null
(如果此位置没有关联的搜索路径) - 抛出:
-
IllegalStateException
- 如果搜索路径的任何元素无法转换为 File,或者如果搜索路径无法表示为一系列简单的文件。 - 参见:
-
getLocationAsPaths
返回与给定位置关联的搜索路径。- 实现要求:
-
默认实现调用
getLocation
,然后返回通过调用getLocation
返回的每个File
上的toPath()
形成的Iterable
。 - 参数:
-
location
- 位置 - 返回:
-
一个路径列表,如果此位置没有关联的搜索路径,则返回
null
- 抛出:
-
IllegalStateException
- 如果搜索路径无法表示为简单的路径系列。 - 自:
- 9
- 参见:
-
asPath
返回此文件对象下层的路径(可选操作),如果有的话。从FileSystem
派生的文件对象,包括默认文件系统,通常具有相应的下层Path
对象。在这种情况下,可以使用此方法访问该对象。- 实现要求:
-
默认实现对所有文件抛出
UnsupportedOperationException
。 - 参数:
-
file
- 文件对象 - 返回:
- 代表相同下层文件系统工件的路径
- 抛出:
-
IllegalArgumentException
- 如果文件对象没有下层路径 -
UnsupportedOperationException
- 如果此文件管理器不支持该操作 - 自:
- 9
-
setPathFactory
指定一个工厂,用于从字符串或一系列字符串生成路径。如果未调用此方法,将使用一个其getPath
方法等效于调用java.nio.file.Paths.get(first, more)
的工厂。- 实现要求:
- 此方法的默认实现忽略提供的工厂。
- 参数:
-
f
- 工厂 - 自:
- 9
-
getJavaFileObjectsFromPaths(Collection)
代替,以防止意外使用单个Path
调用方法。