Вы можете использовать Files # walk для этого:
try {
Files.walk(Paths.get(directoryPath))
.filter(p -> p.toFile().isFile()) // read only files
.skip(OFFSET)
.limit(MAX_FILES_PER_ITERATION)
.forEach(entry -> ... // do you processing here);
} catch (IOException e) {
// add your exception handling here
e.printStackTrace(System.err);
}
Просто добавьте его в цикл и увеличивайте OFFSET
после каждой итерации, пока не достигнете 1 миллиарда.Я не уверен, что это оптимальный путь, но попробуйте и посмотрите, как он работает.