关于ApacheAnt中的dirset类型,我有两个问题。
- 目录集真的是一个没有顺序保证的集合吗?还是它保留了输入顺序?我想使用ant:contrib来迭代一组目录和顺序,所以如果ant的目录集不保留插入顺序,我有什么替代方案
- 如何测试某个目录是否包含在目录集中
[编辑]
如果您查看目录集源代码,它看起来像是使用了javaFile.list()
,其文档声明没有gauranteed顺序所以不,你绝对不能指望这一点但是,在返回之前,它调用Arrays.sort(files);
参见第1572行。
根据我不能说的保存顺序,我会冒险说没有保证,但通常只是碰巧保存文件系统顺序
至于测试,我想你想,如果这个文件存在或类似的东西存在,就采取行动,使用ant contrib,
<for param="directory">
<dirset dir="dirIneedtoexist">
</dirset>
<sequential>
<!-- Stuff to do if it exists. -->
</sequential>
</for>
如果目录中什么都没有,If什么都不做。
Ant文档中没有太多关于dirset的内容。
如果您使用patternset
,则无法保证订单。
如果使用include
,列出单独的目录而不是模式,dirset
应该保留顺序。当然,我会测试一下。
编辑后添加:如果我错了,您可以编写自己的Ant自定义任务来保留include目录的顺序。
根据本页
dirset将目录集添加到隐式生成路径。请注意,目录将不按特定顺序添加到构建路径中,因此如果顺序很重要,则应使用文件列表!
下面是关于如何使用FileList 的链接
否,它不保留顺序。
目录集的内容基于其父类通过DirectoryScanner
公开的内容。该扫描仪遍历文件系统,并且不会以任何特定的顺序执行。
它还使用了File.list
,这是订单不确定性的来源:
无法保证结果数组中的名称字符串会以任何特定顺序出现;它们并不能特别保证按字母顺序出现。