Вы можете перебирать файловую систему, просматривая имена файлов, получая содержимое, если это каталог, и т. Д. Рекурсивно.
Если камнем преткновения является то, как получить диски на компьютере, посмотрите на функцию File.listRoots (), чтобы получить список букв дисков.
ETA:
Чтобы быть абсолютно безопасным, вы захотите включить некоторые ограничения на рекурсивную обработку. В файловой системе могут быть циклы с символическими ссылками и тому подобное (особенно в LINUX / UNIX, но сторонние инструменты могут включить это и в Windows).
Чтобы убедиться, что вы не зацикливаетесь при работе с символическими ссылками, используйте методы File.getCanonicalPath, чтобы получить «реальный» путь для каталога и отслеживать все посещенные канонические пути. Вы также можете использовать getCanonicalFile и отслеживать все файлы, но это, вероятно, не нужно, если вы действительно не хотите избегать случайного случая, когда вы будете обрабатывать один и тот же файл дважды.