Ant类型之FilterChain

一、概述

        FilterChain是一组FilterReader,用户可以通过继承java.io.FilterReader类来定义自己的FilterReader。通过使用filterreader元素可以轻松的将自定义的FilterReader做为嵌套元素插入到filterchain中。通过FilterChain,ant可以灵活的进行数据的转换。支持FilterChain的task有:concat、copy、loadfile、loadproperties、move。过滤器链是通过嵌套0到多个过滤器形成的。Ant提供了一些内置的过滤器。

二、内置过滤器

        FilterReader:一个定义过滤器的通用方法。可以用它在构建文件中定义用户自定义的过滤器元素。内置的过滤器也可以通过这种方式进行定义。filterreader元素必须提供一个classname属性,用这个名称解析的类必须继承java.io.FilterReader。如果自定义的过滤器需要参数化,必须实现org.apache.tools.type.Parameterizable。
                classname:filterreader的类名。
        filterreader支持嵌套classpath和param元素,每个param可以接受name、type和value属性。其他的过滤器也默认支持。

        ClassConstants:过滤java类中定义的基本常量,并以name=value的格式按行输出。此过滤器需要bcel包来解析java类文件。此过滤器与大多数操作字符序列的过滤器不同,此过滤器在组成类的字节序列上进行操作,但是字节到达过滤器后是字符序列,所以在使用字符编码时要格外注意,大多数编码信息会从任意字节序列转为字符,在转回字节的过程中丢失。特别是常用的默认字符编码(CP152和UTF8)。因此,从ant1.7起,从字符转换到字节采用ISO-8859-1编码,也必须使用这个编码读取java类文件。

        EscapeUnicode:ant1.6起,将输入的所有非US-ASCII字符更改为等效的\u加上4位数字的unicode转义。

        ExpandProperties:如果数据包含${}格式的ant属性,过滤器会将其替换为实际的值。ant1.8.3起,可以嵌套propertyset元素。

        HeadFilter:读取提供给过滤器的数据的前几行。具有以下属性:
                lines:读取的行数,默认为10。
                skip:跳过的行数,默认为0。

        LineContains:只包含用户指定字符串的行。具有以下属性:
                contains:要包含的字符串。只能作为嵌套元素使用,支持多个contains元素。
                negate:ant1.7起,是否只选择不包含指定字符串的行。

        LineContainsRegExp:只包含与用户指定的正则表达式匹配的字符串的行。具有以下属性:
                regexp:正则表达式。只能作为嵌套元素使用,支持多个contains元素。有关嵌套元素regexp的说明,请参考regexp类型。
                negate:ant1.7起,是否只选择不包含与指定正则表达式匹配的字符串的行。
                caseseneitive:ant1.8.2起,是否区分大小写,默认为true。

        PrefixLines:每一行附加一个前缀。具有以下属性:
                prefix:附加到行的前缀。

        SuffixLines:ant1.8起,每一行附加一个后缀。具有以下属性:
                suffix:附加到行的后缀。

        ReplaceTokens:将开始标记和结束标记之间的所有字符串替换为用户定义的值。具有以下属性:
                begintoken:开始标记,默认为@。
                endtoken:结束标记,默认为@。
                token:用户定义的字符标记。只能做为嵌套元素使用。
                propertiesfile:获取标记字符的属性文件。只能在通过filterreader方式使用ReplaceTokens时使用。
                value:字符标记替换的值,token的属性。

        StripJavaComments:使用java语法准则从数据中去除注释。不支持任何属性。

        StripLineBreaks:从数据中去除特定的字符。具有以下属性:
                linebreaks:要去掉的字符,默认为“\r\n”。

        StripLineComments:删除以用户指定的注释起始字符串开头的行。
                comment:当出现在行的开头时,将此行识别为注释的字符串。

        TabsToSpaces:用空格替换制表符。具有以下属性:
                tablength:替换的空格数量,默认为8。

        TailFilter:读取提供给过滤器的数据的最后几行。具有以下属性:
                lines:读取的行数,默认为10。如果为-1,表示读取所有的行。
                skip:从后面跳过的行数,默认为0。

        DeleteCharacters:ant1.6起,删除指定的字符。具有以下属性:
                chars:要删除的字符,支持转义。

        ConcatFilter:ant1.6起,预写或附加内容文件到过滤后的文件。具有以下属性:
                prepend:内容将预写到文件的文件名。
                append:内容将附加到文件的文件名。

        TokenFilter:ant1.6起,将输入切分为一组字符串,并将这组字符串传递给字符串过滤器,与其他过滤器不同,TokenFilter不支持param元素。分词器和字符串过滤器通过嵌套元素定义。只能定义一个分词器,如果没有指定默认为LineTokenizer,可以有0到多个字符串过滤器。字符串过滤器处理分词字符串后返回字符串或者null。如果返回字符串,会将字符串传递到下一个过滤器,直到所有的过滤器都被调用。如果所有过滤器都调用后返回的是字符串,会将字符串与相关的分词分隔符输出。分隔符可以通过delimOutput属性覆盖。具有以下属性:
                delimOutput:如果不为空,覆盖分词器返回的分隔符。
        默认分词器有:
                LineTokenizer:将输入切分成行,分词器通过“\r”、“\n”或者“\r\n”分隔行。是默认的分词器。具有以下属性:
                        includeDelims:是否包含行结尾,默认为false。
                FileTokenizer:将所有的输入做为一个分词字符串。所以不要在很大的输入上用这个分词器。
                StringTokenizer:基于java.util.StringTokenizer。将输入按照空格或者指定的分隔符切分成一组字符串。如果输入以分隔符开头,第一个字符会是空字符串。具有以下属性:
                        delims:分隔符,默认为空格,
                        delimsaretokens:如果设置为true,每个分隔符也会返回,默认为false。
                        suppressdelims:如果设置为true,不返回分隔符,默认为false。
                        includeDelims:如果设置为true,分词字符串包含分隔符,默认为false。
        默认字符串过滤器有:

                ReplaceString:一个简单的字符串替换过滤器,可以被FilterChain直接使用。具有以下属性:
                        form:要被替换的字符串。
                        to:被替换字符串的新值,如果不设置,默认为空字符串。
                ContainsString:过滤包含自定字符串的分词字符串。具有以下属性:
                        contains:要包含的字符串。
                ReplaceRegex:替换匹配正则表达式字符串的过滤器,可以被FilterChain直接使用。具有以下属性:
                        pattern:要匹配的正则表达式。
                        replace:替换匹配正则表达式字符串的字符串。默认为空字符串。
                        flags:匹配正则表达式所使用的模式,可选值有g(全局替换,替换所有匹配项)、i(不区分大小写)、m(多行匹配模式,使用^和$做为任一行的开始和结束)、s(单行模式,“.”可以与任意字符匹配,包括换行符,所有的输入看作是一行)。
                ContainsRegex:过滤匹配正则表达式的字符串。还可以选择替换与正则表达式匹配的字符串。可以被FilterChain直接使用。具有以下属性:
                        pattern:要匹配的正则表达式。
                        replace:替换匹配正则表达式字符串的字符串。默认为原始字符串。
                        flags:匹配正则表达式所使用的模式,可选值有g(全局替换,替换所有匹配项)、i(不区分大小写)、m(多行匹配模式,使用^和$做为任一行的开始和结束)、s(单行模式,“.”可以与任意字符匹配,包括换行符,所有的输入看作是一行)。
                Trim:去掉字符串开始和结束的空格,可以被FilterChain直接使用。
                IgnoreBlank:移除空的分词字符串,可以被FilterChain直接使用。
                DeleteCharacters:从分词字符串中删除自定字符,具有以下属性:
                        chars:要删除的字符,支持转义。
                UniqFilter:去掉重复的分词字符串,可以被FilterChain直接使用。
                ScriptFilter:执行支持BSF或者JSR223语言的脚本。script提供了包含getToken()和setToken(String) 方法的self对象。可以被FilterChain直接使用。具有以下属性:
                        language:编写脚本的程序语言,必须是支持BSF或者JSR223的语言。
                        manager:使用的脚本引擎管理器。可选值有:bsf(BSF脚本管理器)、javax(jdk1.6+支持的JSR223脚本管理器)、auto(如果bsf存在使用bsf,否则使用javax),默认为auto。
                        src:如果脚本不是嵌套在标签中,设置脚本文件的位置。
                        setbeans:ant1.8起,是否在脚本中设置所有属性、引用和targets。如果设置为false,只有project和self可用。默认为true。
                        classpath:传递到脚本的类路径。
                        classpathref:使用的类路径引用。

        FixCRLF:见ant内置任务fixcrlf。

        SortFilter:ant1.8起,读取所有行并进行排序,顺序可以反转,可以自定义java.util.Comparator接口的实现来进行更多的控制。
                reverse:是否反转顺序,默认为false。如果设置了comparator属性,则忽略此属性。
                comparator:实现了java.util.Comparator的类的名字。此类用于确定行的排列顺序。

三、简单示例


	
		
			
		
	
	
	
	
	
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
				
			
		
	
	
	
		
			
				
			
		
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
			
			
			
		
	
	
	
		
			
				
				
				
			
		
	
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
				
				
				
			
		
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
		
	
	
	
		
			
				
				
				
				
				
				
				
				
					self.setToken(self.getToken().toUpperCase());
				
			
		
	
	
	
		
			
		
	
	
	
		
			
		
	

你可能感兴趣的:(Ant入门)