Вы должны придерживаться другого подхода, вместо того, чтобы обходить весь каталог каждый раз, когда вы ищете файл, вместо этого вы должны создать индекс, который представляет собой отображение имени файла на местоположение файла.
По существу:
void buildIndex(Map index, File baseDir) {
if (location.isDirectory()) {
File[] arr = location.listFiles();
for (File f : arr) {
buildIndex(index, f);
}
} else {
index.put(f.getName(), f);
}
}
Теперь, когда у вас есть индекс, поиск файлов становится тривиальным.
Теперь у вас есть файлы на карте, вы также можете использовать операцию Set, чтобы найти пересечение:
Map index = new HashMap();
buildIndex(index, ...);
Set fileSet = index.keySet();
Set transactionSet = ...;
Set intersection = new HashSet(fileSet);
fileSet.retainAll(transactionSet);
При желании, если сам индекс слишком велик для хранения в памяти, вы можете создать его в базе данных SQLite.