背景
我有一个应用程序,它在固定目录中创建了许多子文件夹。在这些目录中,它放置了许多文件。文件数在这些文件夹中平均分配。我有一个测试,检查文件夹中的固定值,因此每个文件夹中都有n个文件。
问题
如何测试,有4个子文件夹和5条消息,这4个子文件夹中的消息分布是1个文件夹中的2条消息和3个其中3条消息的消息?
源代码
public boolean checkFileCountInEachFolder(int expectedCount){
File folder = new File(AppProperties.getInstance().get("path"));
File[] files = folder.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
int fileCount = listFiles(file, new ArrayList<File>()).size();
if (fileCount!=expectedCount) {
return false;
}
}
}
}
return true;
}
答案 0 :(得分:1)
有很多方法可以做到,其中之一就是其中之一。
首先,列出具有FileFilter
。
将消息数(方法的参数是消息数)除以文件夹数,以获得最小预期出现次数(可能为0)。
由于您的分配平均,最大出现次数不能超过min + 1.
检查每个子文件夹中的文件数是否在此范围内(或者在这种特殊情况下,简单地等于min或max)。
最后,将找到的所有文件的数量相加,并将结果与消息总数进行比较。
public boolean checkFileCountInEachFolder(final int nbMessages) {
File folder = new File(AppProperties.getInstance().get("path"));
File[] subFolders = folder.listFiles(new FileFilter() {
@Override
public boolean accept(final File f) {
return f.isDirectory();
}
});
int nbFolders = subFolders.length;
int minOccurences = nbMessages / nbFolders;
int maxOccurences = minOccurences + 1;
int totalCount = 0;
for (int i = 0; i < subFolders.length; i++) {
File file = subFolders[i];
int fileCount = listFiles(file, new ArrayList<File>()).size();
if (fileCount < minOccurences || fileCount > maxOccurences) {
return false;
}
totalCount += fileCount;
}
return (totalCount == nbMessages);
}