加载本地文件到 Map 的优化方法

本文介绍了一种优化加载本地文件到 Map 的方法,将原本两个重复的方法合并成一个,提高代码复用率。

优化前的代码:

// 1. 加载本地文件到 map
private void getMapFileInMap() {
    try {
        // 1. 在训练场文件夹找到所有训练场文件
        File fileTrain = new File("D:/mapSycTrain/");
        // 循环所有文件名称,分解 id + time,存入 map
        File[] fs1 = fileTrain.listFiles();    // 遍历path下的文件和目录,放在File数组中
        for (File f : fs1) {                    // 遍历File[]数组
            if (!f.isDirectory()) {      // 若非目录(即文件),则打印
                // 文件名:51-1692846239861.json 分解
                String[] fileName1 = f.getName().split("-");
                String[] fileName2 = fileName1[1].split("\.");
                // 新增对象
                MapSycTrain mapSycTrain = new MapSycTrain();
                mapSycTrain.trainingGroundId = Long.valueOf(fileName1[0]);// 训练场ID
                mapSycTrain.time = Long.valueOf(fileName2[0]);// 时间版本
                // 存入 map
                allMapSycTrainMap.put(Long.valueOf(fileName1[0]), mapSycTrain);
            }
        }
        // 2. 在项目文件夹找到所有项目文件
        File fileProject = new File("D:/mapSycProject/");
        // 循环所有文件名称,分解 id + time,存入 map
        File[] fs2 = fileProject.listFiles();    // 遍历path下的文件和目录,放在File数组中
        for (File f : fs2) {                    // 遍历File[]数组
            if (!f.isDirectory()) {      // 若非目录(即文件),则打印
                String[] fileName1 = f.getName().split("-");
                String[] fileName2 = fileName1[1].split("\.");
                MapSycProject mapSycProject = new MapSycProject();
                mapSycProject.projectRouteMapDataId = Long.valueOf(fileName1[0]);// 项目ID
                mapSycProject.time = Long.valueOf(fileName2[0]);// 时间版本
                allMapSycProjectMap.put(Long.valueOf(fileName1[0]), mapSycProject);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

优化后的代码:

// 加载本地文件到 map
private void loadFilesToMap(String filePath, Map<Long, Object> map) {
    try {
        File file = new File(filePath);
        File[] files = file.listFiles(); // 遍历path下的文件和目录,放在File数组中
        for (File f : files) { // 遍历File[]数组
            if (!f.isDirectory()) { // 若非目录(即文件),则打印
                String[] fileName1 = f.getName().split("-");
                String[] fileName2 = fileName1[1].split("\.");
                Object obj;
                if (map instanceof MapSycTrain) {
                    // 新增MapSycTrain对象
                    MapSycTrain mapSycTrain = new MapSycTrain();
                    mapSycTrain.trainingGroundId = Long.valueOf(fileName1[0]);// 训练场ID
                    mapSycTrain.time = Long.valueOf(fileName2[0]);// 时间版本
                    obj = mapSycTrain;
                } else {
                    // 新增MapSycProject对象
                    MapSycProject mapSycProject = new MapSycProject();
                    mapSycProject.projectRouteMapDataId = Long.valueOf(fileName1[0]);// 项目ID
                    mapSycProject.time = Long.valueOf(fileName2[0]);// 时间版本
                    obj = mapSycProject;
                }
                map.put(Long.valueOf(fileName1[0]), obj);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

// 调用方法
private void getMapFileInMap() {
    String trainFilePath = "D:/mapSycTrain/";
    loadFilesToMap(trainFilePath, allMapSycTrainMap);

    String projectFilePath = "D:/mapSycProject/";
    loadFilesToMap(projectFilePath, allMapSycProjectMap);
}

优化思路:

  1. 将两个方法中的重复代码提取到一个新的方法 loadFilesToMap 中,该方法接收文件路径和目标 Map 作为参数。
  2. loadFilesToMap 方法中,根据目标 Map 的类型判断需要创建的对象类型,并将该对象存入 Map 中。
  3. getMapFileInMap 方法中,分别调用 loadFilesToMap 方法加载训练场文件和项目文件到对应的 Map 中。

优点:

  • 提高代码复用率,减少代码冗余。
  • 代码结构更加清晰,易于维护。
  • 增强代码的可读性和可扩展性。

注意:

  • 代码中使用的 MapSycTrainMapSycProject 类需要根据实际情况进行修改。
  • 文件路径需要根据实际情况进行修改。
  • 建议使用 try-with-resources 语句来管理文件资源,确保文件资源能够被正确关闭。

希望本文能够帮助你更好地理解加载本地文件到 Map 的优化方法。如果你有任何问题,欢迎在评论区留言。

Java 加载本地文件到 Map 的优化方法

原文地址: https://www.cveoy.top/t/topic/qteQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录