java - 插入 Map 的值不会在循环的第二个循环中保留在那里

标签 java dictionary hashmap

下面的函数将具有给定扩展名的所有文件从 rootDirectory 复制到给定目标。当文件名称不同时它工作得很好,但是当有两个文件具有相同名称时(请参阅递归调用 - 它可以位于子目录中),它不会执行应有的操作。如果有更多同名文件,则应复制这两个文件并重命名第二个文件(在其名称中添加 _1、_2、...)。

我发现我正在使用的 map 可能有问题 - 每次复制文件时,我想保存它的名称并添加计数器来计算它被复制的次数(因此可以添加适当的数量以其名)。你能帮我解决这个问题吗?

void copy(File rootDirectory, String destination, String fileExtension) {
    File destFile = new File(destination);
    HashMap<String, Integer> counter = new HashMap<>();
    for (File file : rootDirectory.listFiles()) {
        try {
            if (file.isDirectory()) { copy(file, destination, fileExtension);
            } else if (getExtension(file.getPath().toLowerCase()).equals(fileExtension.toLowerCase())) { 
                if (!destFile.exists()) { destFile.mkdirs();}
                String fileName = file.getName();
                if(counter.containsKey(fileName)){  // <<-- IS NEVER TRUE 
                    int count = counter.get(fileName);
                    count++;
                    counter.put(fileName, count);
                    int i = fileName.contains(".") ? fileName.lastIndexOf('.') : fileName.length();
                    fileName = fileName.substring(0, i) + "_" + count + fileName.substring(i);
                } else{ counter.put(fileName, 0);
                }
                Files.copy(file.toPath(), Paths.get(destination + "\\" + fileName), StandardCopyOption.REPLACE_EXISTING);
            }
        } catch (IOException e) {
            //...
        }
    }
} 

最佳答案

您正在使用递归。换句话说,你总是从一个新的空 map 开始。将 map 放在您的方法之外,这将解决您的问题。

关于java - 插入 Map 的值不会在循环的第二个循环中保留在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34775273/

相关文章:

scala - 在 Scala 中将可变数量的元组序列减少到 Map[Key, List[Value]]

java - 将映射值编码到接口(interface) - 声明 Map <String, List<>> 并分配 HashMap<String, ArrayList<>>()

C# 强制使用字典键

java - for 循环内的 while 循环不起作用

java - 如何增加整数左值

java - 你能帮我完成我的 Android 添加程序吗?

java - 如何在 Eclipse 中列出一个类的所有可用方法?

Java 线程安全的 LinkedHashMap 实现?

java - 如何获取HashMap中排序后的arrayList?

java - spring 和 hibernate 集成类未找到异常