Последовательно пройтись по каталогам, используя Java - PullRequest
2 голосов
/ 21 апреля 2020

Я получаю пакет от моего менеджера в сжатом формате, и при извлечении его будет указана ниже структура пути файла. Эти файлы должны быть скопированы в определенной последовательности c в базу данных.

--DDL
-----abc.sql
--Table
-----def.sql
--Function
-----ghi.sql
--Stored Procedure
-----jkl.sql
-----mno.sql

Требуется, чтобы сначала использовалось содержимое папки DDL, затем Таблица, затем Функции и, наконец, хранимая процедура.

Иногда может быть только две папки, как показано ниже

--Function
----abc.sql
--Stored Procedure
----jkl.sql
----mno.sql

В таких случаях также следует применять хранимую процедуру в конце. Порядок не может быть изменен независимо от того, какие папки находятся в извлеченном файле.

Как этого добиться с Java? Я легко реализовал это в Python.

Примечание : возможно ли смешивать интерфейс filevisitor в этом случае, учитывая, что в каждом каталоге будут вложенные каталоги и несколько файлов?

1 Ответ

0 голосов
/ 21 апреля 2020

Предполагая, что содержимое уже распаковано, я бы реализовал его следующим образом:

  1. С помощью Files.walk() метода, проходящего через весь каталог

  2. Отфильтровать только SQL файлы

  3. Отобразить пути к типу, который содержит сам путь и приоритет каталога, чтобы тип мог сортироваться

  4. Сортировать результаты

  5. Применить SQL

Короче

final Path sourcePath = Paths.get("/tmp/extracted-sql-import-root/");
try (Stream<Path> walk = Files.walk(sourcePath)) {

  walk.filter(isSqlFile)
    .map(filePath -> new SqlFile(sourcePath, filePath))
    .sorted()
    .forEach(processSqlFile);

} catch (IOException iOException) {
  // TODO handle exception
}

Я не использовал FileVisitor как я полагаю, вы не можете влиять на порядок, в котором файлы посещаются, а затем он становится устаревшим, так как вы обеспокоены порядком.

Ссылка на полный код , я не сделал не обрабатывать все фактические крайние случаи.

Из алгоритма, который я пропустил, часть SQL, думаю, вас интересует только обработка файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...