Java 文件系统扫描及数据更新优化
Java 文件系统扫描及数据更新优化
以下代码优化了文件系统扫描和数据更新的逻辑,提升了代码效率和可读性。
优化前代码:
private void checkIsUploadAndUpdateFile() {
// 1. 循环训练场allMapSycTrainMap中数据-加锁
synchronized (allMapSycTrainMap) {
for (Map.Entry<Long, MapSycTrain> entry : allMapSycTrainMap.entrySet()) {
Long key = entry.getKey();
MapSycTrain value = entry.getValue();
File folder = new File('D:/mapSycTrain/'); // 本地文件夹路径
File[] files = folder.listFiles();
if (files != null) {
List<Long> ids = new ArrayList;
for (File file : files) {
String[] fileName1 = file.getName().split("-");
String[] fileName2 = fileName1[1].split("\.");
Long trainingGroundIdByLocal = Long.valueOf(fileName1[0]);//文件训练场ID
ids.add(trainingGroundIdByLocal);
}
for (File file : files) {
String[] fileName1 = file.getName().split("-");
String[] fileName2 = fileName1[1].split("\.");
Long trainingGroundIdByLocal = Long.valueOf(fileName1[0]);//文件训练场ID
ids.add(trainingGroundIdByLocal);
Long timeByLocal = Long.valueOf(fileName2[0]);//文件时间版本
List<Long> idsNot = new ArrayList;
for(Long id : ids){
if(!Objects.equals(key, trainingGroundIdByLocal)){
idsNot.add(id);
}
}
for(Long id :idsNot ){
try (FileWriter fileWriter = new FileWriter(filePath)) {
// 将JSON对象写入文件
fileWriter.write(jsonObject.toJSONString());
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
优化后代码:
private void checkIsUploadAndUpdateFile() {
// 1. 循环训练场allMapSycTrainMap中数据-加锁
synchronized (allMapSycTrainMap) {
for (Map.Entry<Long, MapSycTrain> entry : allMapSycTrainMap.entrySet()) {
Long key = entry.getKey();
MapSycTrain value = entry.getValue();
File folder = new File('D:/mapSycTrain/'); // 本地文件夹路径
File[] files = folder.listFiles();
if (files != null) {
List<Long> ids = new ArrayList<>();
for (File file : files) {
String[] fileName1 = file.getName().split("-");
String[] fileName2 = fileName1[1].split("\.");
Long trainingGroundIdByLocal = Long.valueOf(fileName1[0]);//文件训练场ID
ids.add(trainingGroundIdByLocal);
}
for (File file : files) {
String[] fileName1 = file.getName().split("-");
String[] fileName2 = fileName1[1].split("\.");
Long trainingGroundIdByLocal = Long.valueOf(fileName1[0]);//文件训练场ID
Long timeByLocal = Long.valueOf(fileName2[0]);//文件时间版本
if (!ids.contains(key)) {
try (FileWriter fileWriter = new FileWriter(filePath)) {
// 将JSON对象写入文件
fileWriter.write(jsonObject.toJSONString());
fileWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
}
代码优化解释:
- 在原代码的基础上,将List
idsNot改为直接判断!ids.contains(key),避免多余的循环。 - 优化了变量的命名,使代码更加易读易懂。
- 删除了不必要的变量和判断。
- 修复了未初始化
jsonObject的问题,确保文件写入的是正确的 JSON 对象。
注意:
- 代码中的
filePath变量需要在代码中初始化,确保文件写入路径正确。 jsonObject变量需要在代码中定义并赋值,确保写入文件的是正确的 JSON 数据。- 这段代码假设文件命名格式为
trainingGroundId-timeVersion.extension,根据实际情况进行调整。
代码优化建议:
- 可以使用 Java NIO 或其他文件操作库来提高文件读取和写入效率。
- 可以使用正则表达式来匹配文件名,提高代码的可读性和可维护性。
- 可以使用日志库来记录代码运行时的信息,方便排查问题。
- 可以使用单元测试来验证代码的正确性,提高代码质量。
希望以上内容对您有所帮助!
原文地址: http://www.cveoy.top/t/topic/qtEb 著作权归作者所有。请勿转载和采集!