问题描述:
filter的使用很简便,如下示例为文件拷贝过程中进行文本替换。
<copy file="oldfile.txt" toFile="newfile.txt">
<filterset begintoken="%" endtoken="&">
<filter token="oldvalue" value="newvalue"/>
</filterset>
</copy>
可以很简便的设置begintoken及endtoken来定义要被替换的文本的前后定界符,默认为@,可以自定义其他定界符。
然而,当我们的文本中没有!@#¥%&*等特殊符号时该怎么办呢,如下面的oldfile.txt.
//oldfile.txt
fowjow
WAS_HOME=WAS_HOME_VALUE
hahah
hahheh
hehworu
23o4
dfhosa
我们的任务是将oldfile.txt中的WAS_HOME_VALUE替换为C:/Program Files/Tools/WebSphere。
初步的想法是将定界符定义为空格或是回车符,但是这样又会产生问题。
为了完成任务,初步解决方案如下。虽然是一个比较笨的解决方法,但是由于刚刚接触Ant,还没能想出其他方法,就暂时将方法记录在下面,等以后有了更好的解决方法再进行替换吧~~~
<?xml version="1.0" encoding="UTF-8"?>
<project name="project" default="replaceTokens">
<property name="oldFileName" value="oldFile.txt" />
<property name="newFileName" value="newFile.txt" />
<property name="was_home" value="WAS_HOME" />
<property name="was_home_value" value="WAS_HOME_VALUE" />
<property name="newValue" value="C:/Program Files/Tools/WebSphere" />
<target name="replaceTokens">
<copy file="${oldFileName}" tofile="${newFileName}">
<filterset begintoken="${was_home}" endtoken="${was_home_value}" >
<filter token="=" value="${was_home}=${newValue}" />
</filterset>
</copy>
</target>
</project>
注意:使用新文本替换旧文本时,不仅仅是替换旧文本,而是替换旧文本以及前后定界符。