public interface Filer
close
方法被调用用来写文件的内容
OutputStream
Writer
或在以后的
round of processing由工具
considered for processing。三种文件类型:源文件、类文件和辅助资源文件。
有两个支撑位置(逻辑文件系统内的子树)在新创建的文件是放在:一new source files,和一个new class files。(这可能是一个工具的命令行,指定为例,使用标志,如-s
和-d
。)新的源文件和类文件的实际地点可能会或可能不会在一个特定的运行的工具不同。可以在任一位置创建资源文件。阅读和写作资源的方法采取一个相对名称的说法。一个相对的名字是一个非空,路径段相隔'/'
非空序列;'.'
和'..'
无效路径段。一个有效的相对名称必须匹配RFC 3986“路径根”的规则,3.3节。
文件创建方法采取了可变数量的参数,以允许源元素提供给工具基础设施的提示,以更好地管理依赖关系。原始元素的类型或包(代表package-info
文件)引起的一种注解处理器试图创建一个新文件。例如,如果一个注释处理器试图创建一个源文件,GeneratedFromUserSource
,响应处理
为@Generate public class UserSource {}
UserSource
类型元素需要通过作为创作方法调用的一部分如:
如果没有起源的要素,都需要通过。这个信息可以用于增量式环境确定需要重新处理或删除生成的文件。非增量环境可能忽略源元素信息。filer.createSourceFile("GeneratedFromUserSource", eltUtils.getTypeElement("UserSource"));
每次运行注释处理工具中,一个给定的路径名的文件可能只创建一次。如果在第一次尝试创建它之前已经存在该文件,旧的内容将被删除。随后的任何企图在运行过程中创建相同的文件将FilerException
,将尝试创建一个类文件,为同类型名称或相同的包名的源文件。的initial inputs的工具被认为是第零轮创造的;因此,试图创建一个源代码或类文件对应一个的输入将导致FilerException
。
在一般情况下,处理器不能故意试图覆盖没有由一些处理器产生的现有文件。一个Filer
可能拒绝尝试打开对应的现有类型、文件java.lang.Object
。同样,注释的处理工具者不得有意配置工具,发现处理器将覆盖现有的文件,不生成。
处理器可以显示源代码或类文件包括@Generated
注释生成。
注意有些改写文件可以通过使用一个装饰式模式取得的效果。而不是修改一个类,类的设计是这样的,无论是它的父类的子类的类注释处理或产生的标注处理产生。如果生成子类,父类可以被设计为使用工厂而不是公共构造函数,这样只有子类的实例将提交给父类的客户端。
Modifier and Type | Method and Description |
---|---|
JavaFileObject |
createClassFile(CharSequence name, Element... originatingElements)
创建一个新的类文件,并返回一个对象,让它给它写。
|
FileObject |
createResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName, Element... originatingElements)
创建一个新的辅助资源文件,并为其返回一个文件对象。
|
JavaFileObject |
createSourceFile(CharSequence name, Element... originatingElements)
创建一个新的源文件,并返回一个对象,让它给它写。
|
FileObject |
getResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName)
返回一个用于读取现有资源的对象。
|
JavaFileObject createSourceFile(CharSequence name, Element... originatingElements) throws IOException
name
是包的名称后跟
".package-info"
;创建一个源对一个未命名的包文件,使用
"package-info"
。
值得注意的是,使用一个特定的charset编码文件的内容,与所选择的字符集的一个OutputStreamWriter
可以从返回的对象的OutputStream
创建。如果返回的对象的Writer
直接用于写作,它的字符集是由实现确定。注释处理工具可能有-encoding
标志或类似的选项用于指定本;否则,它通常是平台的默认编码。
为了避免日后的错误的源文件的内容应与source version用于运行兼容。
name
规范(合格)的主要类型为该文件或包的名称后跟
".package-info"
一包信息文件中声明的名字
originatingElements
型或包元素的因果关系与该文件相关的创作,可以省略或
null
JavaFileObject
写新的源文件
FilerException
如果相同的路径已经被创造出来,同类型已被创建,或名不是一个有效的类型
IOException
如果不能创建文件
JavaFileObject createClassFile(CharSequence name, Element... originatingElements) throws IOException
name
是包的名称后跟
".package-info"
;创建未命名的包中的类文件是不支持的。
为了避免以后的错误,类文件的内容应与source version用于运行兼容。
name
-被书写的类型或包名
".package-info"
一包信息文件的二进制名称
originatingElements
型或包元素的因果关系与该文件相关的创作,可以省略或
null
JavaFileObject
写新的类文件
FilerException
如果相同的路径已经被创造出来,同类型已被创建,或名不是一个有效的类型
IOException
如果不能创建文件
FileObject createResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName, Element... originatingElements) throws IOException
CLASS_OUTPUT
和
SOURCE_OUTPUT
必须支持。资源可能被命名为相对于一些包装(如源文件和类文件),并从那里通过相对路径。在一个松散的意义上,这个新的文件的完整路径将
location
,
pkg
,拼接和
relativeName
。
通过该方法创建的文件并未标注处理,即使该文件的完整路径名对应的一个新的源文件或类文件的完整路径。
location
-新的文件位置
pkg
包相关的文件应该命名,或空字符串,如果没有
relativeName
最终路径组件
originatingElements
型或包元素的因果关系与该文件相关的创作,可以省略或
null
FileObject
写新资源
IOException
如果不能创建文件
FilerException
如果相同的路径已经创建
IllegalArgumentException
-一个不受支持的位置
IllegalArgumentException
-如果
relativeName
相对不
FileObject getResource(JavaFileManager.Location location, CharSequence pkg, CharSequence relativeName) throws IOException
CLASS_OUTPUT
和
SOURCE_OUTPUT
必须支持。
location
-文件位置
pkg
包相对应的文件搜索,或空字符串,如果没有
relativeName
最终路径组件的文件
FilerException
如果相同的路径已经打开写作
IOException
如果文件无法打开
IllegalArgumentException
-一个不受支持的位置
IllegalArgumentException
-如果
relativeName
相对不
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.