如何顺序编号文件而不是在移动时覆盖它们

时间:2014-06-01 06:06:03

标签: java file-io

我正在编写一个可以将文件从一个目录移动到另一个目录的代码,但是我遇到了一个具有相同名称的文件的问题,因此我决定对它们进行编号,因为我不想覆盖它们。

假设我有文件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);

1 个答案:

答案 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
}