Сопоставление типов файлов Java с расположением папок - PullRequest
0 голосов
/ 31 октября 2019

ищет хорошее дизайнерское решение на Java для следующего требования

На основании типа файла, который может быть известен по имени файла, мы должны переместить файл в определенную общую папку, например, если файлэто zip-файл, который я должен переместить в «заархивированное» местоположение или, если это не zip-файл, то в другое место и т. д.

С помощью имени файла и расширения мы сможем узнать, какой это тип файлаи есть вероятность, что в будущем можно будет добавить больше правил, поэтому я хотел бы избежать сложных операторов if-else или switch

, например, если имя файла IN_MAH_MUM-_20190306162024X_CANCER.xml, это неzip-файл и содержит слово «CANCER», следовательно, он перейдет в папку «CANCERFILES»

, в основном для эффективного сопоставления типов файлов и местоположений папок

нижеэто пример

Типы файлов

  • Сжатые Переместить в папку «Сжатые»
  • Разархивироватьed
    • Medical
    • CancerFiles Перейдите в папку «CancerFiles»
    • CardioFiles
    • OrthoFiles
    • Non Medical
    • FinancialFiles
    • OccupationFiles

Код для сопоставления - получение значений из файла json

Map<String,String> mapFileTypeLocations = new HashMap();        
mapFileTypeLocations.put(fileTypes.getAsJsonObject().get("cardioTypeFiles").getAsJsonArray().toString(),locations.getAsJsonObject().get("cardioFilesLocation").getAsString());
    mapFileTypeLocations.put(fileTypes.getAsJsonObject().get("financeTypeFiles").getAsJsonArray().toString(),locations.getAsJsonObject().get("financeFilesLocation").getAsString());

Это сопоставление может не соответствоватьработать эффективно, если требование требует добавления большего количества условий, таких как основанные на часовом поясе, коде страны, коде города, которые являются частью имени файла

1 Ответ

0 голосов
/ 31 октября 2019

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

Даже если это может показаться пугающим, база данных может быть самым простым решением. Для реляционной базы данных, предполагая одну таблицу FILES с двумя столбцами, тип и почтовый индекс (просто случай). С помощью простого запроса вы можете агрегировать файлы так, как вы предпочитаете (или необходимы). Вы можете использовать встроенную БД, такую ​​как Apache Derby или HSQLDB

Однако, поскольку ваши требования кажутся неопределенными, вместо реляционной БД я бы предложил более продвинутый вариантиспользуя MongoDB . MongoDB позволяет вам добавлять новые поля в ваши метаданные (тип, почтовый индекс и т. Д.), Не влияя на структуру базы данных, потому что вы просто обновляете документ json, связанный с этим файлом. Более того, MongoDB позволяет вам также хранить файлы, так что для общего решения вы также можете быть независимыми от файловой системы.

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

  • Вы можете иметь надежный тип файла и анализ метаданных, используя Apache Tika
  • для файла конфигурации сопоставления. более чистый формат, чем json (Spring Framework использует для конфигурации xml или json, а не json)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...