All*_*mis 0 java dictionary hashmap
下面的功能将具有给定扩展名的所有文件从rootDirectory复制到给定目标.当文件的名称不同时,它运行良好,但是当有两个具有相同名称的文件时(请参阅recurvive调用 - 它可以在子目录中),它不会执行应有的操作.如果有更多具有相同名称的文件,则应复制这两个文件并重命名第二个文件(将_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) {
//...
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29 次 |
| 最近记录: |