Java 将文件类型映射到文件夹位置

标签 java oop

在 Java 中寻找一个好的设计解决方案来满足以下要求

根据可以通过文件名得知的文件类型,我们必须将文件移动到特定的共享文件夹,例如,如果文件是 zip 文件,我必须移动到“压缩”位置,或者如果它不是zip 文件,然后是不同的位置,依此类推

通过文件名和扩展名,我们将能够知道它是什么类型的文件,并且将来有可能添加更多规则,因此我想避免复杂的 if-else 或 switch 语句

例如,如果文件名是 IN_MAH_MUM-_20190306162024X_CANCER.xml,则这不是 zip 文件,并且其中包含“CANCER”单词,因此它将转到“CANCERFILES”文件夹

基本上以有效的方式寻找文件类型和文件夹位置之间的映射

下面是一个例子

文件类型

  • 压缩 移至“压缩”文件夹
  • 解压缩
    • 医疗
    • 癌症文件 移至“CancerFiles”文件夹
    • 有氧运动文件
    • OrthoFiles
    • 非医疗
    • 财务文件
    • 职业文件

映射代码 - 从 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());

如果需求需要添加更多条件,例如基于文件名一部分的时区、国家/地区代码、城市代码,则此映射可能无法有效工作

最佳答案

结构的目标是有效地访问数据。 如果您按类型并按邮政编码组织文件夹,则您会认为类型比邮政编码更重要。 如果您按邮政编码并按类型组织文件夹,则您会认为位置比类型更重要。

即使它看起来很可怕,数据库也可能是最简单的解决方案。 对于关系数据库,假设一个表 FILES 有两​​列,类型和邮政编码(只是一个简单的情况)。通过简单的查询,您可以按照您喜欢(或需要)的方式聚合文件。您可以使用像 Apache Derby 这样的嵌入式数据库或HSQLDB

但是,因为您的要求似乎仍然模糊,所以我建议使用 MongoDB 代替关系数据库使用更高级的选项。 MongoDB 允许您向元数据(类型、邮政编码等)添加新字段,而不会影响数据库结构,因为您只需更新与该文件关联的 json 文档。更重要的是,MongoDB 还允许您存储文件,因此,对于通用解决方案,您也可以独立于文件系统。

由于您的组还不清楚,很难告诉您哪个是最好的结构,但是这里有一些适合您的情况的要点

  • 您可以使用 Apache Tika 进行可靠的文件类型和元数据分析
  • 对于映射配置文件,yaml 是比 json 更清晰的格式(Spring Framework 使用 xml 或 json 进行配置,而不是 json)

关于Java 将文件类型映射到文件夹位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58634120/

相关文章:

oop - 解释OOP原则的最佳方法?

java - 如何从终端创建可执行 jar 文件

java - 为什么我不能在 IntelliJ 中拖动执行点(我可以在 Visual Studio 中)

java - Heroku 部署失败

java - 基于管道的系统的架构/设计。如何改进这段代码?

perl - 没有符号引用的调度方法

java - 在类路径中定位文件

Java Android - iText - 使用 cellEvent writeSelectedRows

php - 如何使用 $this 访问静态类成员?

php - 错误的 OO 架构、共享对象和依赖项?也许我在这里缺少设计模式?