Для чтения нескольких файлов вы должны использовать какой-то цикл для итерации.Вы можете сканировать все действительные файлы в каталоге.
File folder = new File("path/to/directory");
File[] files = folder.listFiles();
for (int i = 0; i < files.length; i++) {
// you can also filter for .xml if needed
if (files[i].isFile()) {
// parse the file
}
}
Далее вам нужно решить, как вы хотите анализировать файлы: последовательно или параллельно .Параллель намного быстрее, так как вы используете несколько потоков для разбора файлов.
Один поток
Вы можете повторно использовать свой код, который вы уже написали, и перебирать файлы:
for (File file : files) {
processFile(file, yourListOfEntities);
}
Несколько потоков:
Aquire a ScheduledExecutorService
и отправка нескольких задач.
ExecutorService service = Executors.newFixedThreadPool(5);
for (File file : files) {
service.execute(() -> processFile(file, yourListOfEntities));
}
Важное замечание: реализация по умолчанию ArrayList
не является поточно-безопасной, поэтому выследует (поскольку List
используется несколькими потоками) синхронизировать доступ к нему:
List<Entity> synchronizedList = Collections.synchronizedList(yourListOfEntities);
Кроме того, DocumentBuilder
не является потокобезопасным и его следует создавать один раз для каждого потока (если выпросто назовите свой метод).Эта заметка только для случая, если вы думаете об ее оптимизации.