我正在编写一个可以将文件从一个目录移动到另一个目录的代码,但是我遇到了一个具有相同名称的文件的问题,因此我决定对它们进行编号,因为我不想覆盖它们。
假设我有文件a.txt,我成功移动同名文件,然后将其命名为a_1.txt,但我想知道如果我再次使用a.txt会怎么做?
此外,我觉得我的代码效率不高,如果你帮我加强代码,我们将不胜感激。
我的代码是:
/*
* Method to move a specific file from directory to another
*/
public static void moveFile(String source, String destination) {
File file = new File(source);
String newFilePath = destination + "\\" + file.getName();
File newFile = new File(newFilePath);
if (!newFile.exists()) {
file.renameTo(new File(newFilePath));
} else {
String fileName = FilenameUtils.removeExtension(file.getName());
String extention = FilenameUtils.getExtension(file.getPath());
System.out.println(fileName);
if (isNumeric(fileName.substring(fileName.length() - 1))) {
int fileNum = Integer.parseInt(fileName.substring(fileName.length() - 1));
file.renameTo(new File(destination + "\\" + fileName + ++fileNum + "." + extention));
} else {
file.renameTo(new File(destination + "\\" + fileName + "_1." + extention));
}
}//End else
}
从main开始,我将其称为以下(请注意,ManageFiles是该方法所在的类名):
String source = "L:\\Test1\\Graduate.JPG";
String destination = "L:\\Test2";
ManageFiles.moveFile(source, destination);
答案 0 :(得分:2)
您可以使用此逻辑:
如果目标中已存在该文件,则将“(1)”添加到文件名(扩展名之前)。但是你问我:如果已经存在“(1)”文件怎么办?然后你用(2)。如果已经有一个(2),则使用(3),依此类推。
您可以使用循环来完成此操作:
/*
* Method to move a specific file from directory to another
*/
public static void moveFile(String source, String destination) {
File file = new File(source);
String newFilePath = destination + "\\" + file.getName();
File newFile = new File(newFilePath);
String fileName;
String extention;
int fileNum;
int cont;
if (!newFile.exists()) {
file.renameTo(new File(newFilePath));
} else {
cont = 1;
while(newFile.exists()) {
fileName = FilenameUtils.removeExtension(file.getName());
extention = FilenameUtils.getExtension(file.getPath());
System.out.println(fileName);
newFile = new File(destination + "\\" + fileName + "(" + cont++ + ")" + extention);
}
newFile.createNewFile();
}//End else
}