Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入到映射中的值不会保留在循环的第二个循环中_Java_Dictionary_Hashmap - Fatal编程技术网

Java 插入到映射中的值不会保留在循环的第二个循环中

Java 插入到映射中的值不会保留在循环的第二个循环中,java,dictionary,hashmap,Java,Dictionary,Hashmap,下面的函数将具有给定扩展名的所有文件从根目录复制到给定目标。当文件名不同时,它可以很好地工作,但是当有两个文件具有相同的名称时(请参阅递归调用-它可以位于子目录中),它不会做它应该做的事情。如果有更多同名文件,则应复制这两个文件并重命名第二个文件(将_1,_2,…添加到其名称) 我发现我使用的映射可能有问题-每次复制文件时,我都要保存其名称,并添加计数器来计算复制的次数(以便在其名称中添加适当的数字)。你能帮我解决这个问题吗 void copy(File rootDirectory, Strin

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

我发现我使用的映射可能有问题-每次复制文件时,我都要保存其名称,并添加计数器来计算复制的次数(以便在其名称中添加适当的数字)。你能帮我解决这个问题吗

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) {
            //...
        }
    }
} 
void复制(文件根目录、字符串目标、字符串文件扩展名){
文件destFile=新文件(目标);
HashMap计数器=新HashMap();
对于(文件:rootDirectory.listFiles()){
试一试{
if(file.isDirectory()){copy(文件、目标、文件扩展名);
}else if(getExtension(file.getPath().toLowerCase()).equals(fileExtension.toLowerCase()){
如果(!destFile.exists()){destFile.mkdirs();}
字符串文件名=file.getName();

if(counter.containsKey(文件名)){/您正在使用递归。换句话说,您总是从一个新的空映射开始。将映射放在您的方法之外,这将解决您的问题。

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

如果答案对您有帮助,请继续如果答案是帮助你,请考虑把它标记为答案!