重命名 zip 文件中的重复文件 Java
Rename duplicate files in a zip file Java
我有几个文件,包括必须压缩成一个副本的副本 archive.Do 你知道一些工具能够在创建存档之前重命名重复文件 ex(cat.txt, cat(1).txt , cat(2).txt ...)?
在某些 class 中添加具有一些初始值的静态字段。
static int number = 1;
然后在您的 java 代码中,您可以使用 java 8 个流和文件 class 以这种方式重命名重复项:
Set<String> files = new HashSet<String>();
youCollectionOfFiles.stream().forEach((file)->{
if (files.add(file.getFileName().toString()) == false) {
try {
//rename the file
Files.move(file,
file.resolveSibling(file.getFileName().toString() + (number++)));
} catch (Exception e) {
e.printStackTrace();
}
}
});;
我创建了以下代码,可以轻松删除重复项:
static void renameDuplicates(String fileName, String[] newName) {
int i=1;
File file = new File(fileName + "(1).txt");
while (file.exists() && !file.isDirectory()) {
file.renameTo(new File(newName[i-1] + ".txt"));
i++;
file = new File(fileName + "(" + i + ").txt");
}
}
使用也很简单:
String[] newName = {"Meow", "MeowAgain", "OneMoreMeow", "Meowwww"};
renameDuplocates("cat", newName);
结果是:
cat.txt -> cat.txt
cat(1).txt -> Meow.txt
cat(2).txt -> MeowAgain.txt
cat(3).txt -> OneMoreMeow.txt
请记住,重复项的数量应小于或等于给定字符串数组中的替代名称。您可以通过 while 循环修改来防止它:
while (file.exists() && !file.isDirectory() && i<=newName.length)
在这种情况下,其余文件将保持未命名状态。
试试这样的方法:
File folder = new File("your/path");
HashMap<String,Integer> fileMap = new HashMap<String,Integer>();
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if(fileMap.containsKey(listOfFiles[i])){
String newName = listOfFiles[i]+"_"
+fileMap.get(listOfFiles[i]);
fileMap.put(listOfFiles[i],fileMap.get(listOfFiles[i])+1);
listOfFiles[i].renameTo(newName);
fileMap.put(newName,1); // can be ommitted
}else{
fileMap.put(listOfFiles[i],1);
}
}
我有几个文件,包括必须压缩成一个副本的副本 archive.Do 你知道一些工具能够在创建存档之前重命名重复文件 ex(cat.txt, cat(1).txt , cat(2).txt ...)?
在某些 class 中添加具有一些初始值的静态字段。
static int number = 1;
然后在您的 java 代码中,您可以使用 java 8 个流和文件 class 以这种方式重命名重复项:
Set<String> files = new HashSet<String>();
youCollectionOfFiles.stream().forEach((file)->{
if (files.add(file.getFileName().toString()) == false) {
try {
//rename the file
Files.move(file,
file.resolveSibling(file.getFileName().toString() + (number++)));
} catch (Exception e) {
e.printStackTrace();
}
}
});;
我创建了以下代码,可以轻松删除重复项:
static void renameDuplicates(String fileName, String[] newName) {
int i=1;
File file = new File(fileName + "(1).txt");
while (file.exists() && !file.isDirectory()) {
file.renameTo(new File(newName[i-1] + ".txt"));
i++;
file = new File(fileName + "(" + i + ").txt");
}
}
使用也很简单:
String[] newName = {"Meow", "MeowAgain", "OneMoreMeow", "Meowwww"};
renameDuplocates("cat", newName);
结果是:
cat.txt -> cat.txt
cat(1).txt -> Meow.txt
cat(2).txt -> MeowAgain.txt
cat(3).txt -> OneMoreMeow.txt
请记住,重复项的数量应小于或等于给定字符串数组中的替代名称。您可以通过 while 循环修改来防止它:
while (file.exists() && !file.isDirectory() && i<=newName.length)
在这种情况下,其余文件将保持未命名状态。
试试这样的方法:
File folder = new File("your/path");
HashMap<String,Integer> fileMap = new HashMap<String,Integer>();
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if(fileMap.containsKey(listOfFiles[i])){
String newName = listOfFiles[i]+"_"
+fileMap.get(listOfFiles[i]);
fileMap.put(listOfFiles[i],fileMap.get(listOfFiles[i])+1);
listOfFiles[i].renameTo(newName);
fileMap.put(newName,1); // can be ommitted
}else{
fileMap.put(listOfFiles[i],1);
}
}