前言
在项目中,因为一个问题需要修改某个大的文本文件(超过50MB),由于项目 git 中限制了文件不能超过 50MB,导致文件无法提交成功。此时需要将文件拆分成多个子文件,在打包时再合并成一个文件。由于项目中使用 ant 打包,自然就想到了用 ant 来解决这一问题。concat 标签就是用来合并文件或字符串的,刚好满足这个需求。
使用
concat 有很多属性,主要用到的是 destfile
、encoding
、outputencoding
、fixlastline
、eol
。
destfile
,主要表示合并后输出的文件encoding
,主要表示输入的文件的编码格式,默认是 JVM 的编码格式outputencoding
,主要表示输出的文件的编码格式,默认是 JVM 的编码格式fixlastline
,合并文件时有效,主要表示多个文件合并过程中处理完一个文件后是否添加新的一行eol
,与fixlastline
结合使用,主要表示合并文件中添加一行的内容。主要有:cr
、lf
、crlf
、mac
、unix
、dos
。默认会随操作系统类型进行设置,如 dos 操作系统添加crlf
,unix 操作系统添加lf
。
其他属性的使用及解释参考官网:http://ant.apache.org/manual/index.html
例子
假设在 test 目录下有两个文件:a.txt、b.txt,其内容如下
a.txt
1 | 1,北京 |
b.txt
1 | 5,杭州 |
现在要将两个文件的内容合并成一个文件 c.txt,则可以编写如下构建脚本
1 | <project name="testAntConcat" default="build" basedir="."> |
结果会生成一个 c.txt 文件,内容如下,刚好是 a.txt 和 b.txt 文件的内容
1 | 1,北京 |
有几个需要注意的地方。第一,在脚本中,fixlastline="yes"
是必须的,否则合并文件后不会换行,会出现如下的情况,至于新增的换行符,使用默认的即可,ant 会根据系统自行添加。
1 | 1,北京 |
第二,encoding="utf-8"
、 outputencoding="utf-8"
这两个属性也是必须的,否则合并文件后会出现乱码,因为包含中文,如果不包含中文,只有数字和字母,没有这两个属性也可以。
总体而言,concat 还是比较简单的,参考官网的说明,写个简单例子验证一下,就能正确运用到项目中了。