Java 加载本地文件到 Map 的优化方法
加载本地文件到 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);
}
优化思路:
- 将两个方法中的重复代码提取到一个新的方法
loadFilesToMap中,该方法接收文件路径和目标 Map 作为参数。 - 在
loadFilesToMap方法中,根据目标 Map 的类型判断需要创建的对象类型,并将该对象存入 Map 中。 - 在
getMapFileInMap方法中,分别调用loadFilesToMap方法加载训练场文件和项目文件到对应的 Map 中。
优点:
- 提高代码复用率,减少代码冗余。
- 代码结构更加清晰,易于维护。
- 增强代码的可读性和可扩展性。
注意:
- 代码中使用的
MapSycTrain和MapSycProject类需要根据实际情况进行修改。 - 文件路径需要根据实际情况进行修改。
- 建议使用 try-with-resources 语句来管理文件资源,确保文件资源能够被正确关闭。
希望本文能够帮助你更好地理解加载本地文件到 Map 的优化方法。如果你有任何问题,欢迎在评论区留言。
原文地址: https://www.cveoy.top/t/topic/qteQ 著作权归作者所有。请勿转载和采集!