Как упорядочить и переименовать файлы по номеру?

Я хочу сначала упорядочить файлы и переименовать их в соответствии с их порядком, указанным числом в имени файла.

Например:

У меня есть папка, которая содержит кучу разных файлов. Имена файлов указываются числом в конце. Допустим, у нас есть следующие файлы в этой папке:

file_1.xml  // Remains unchanged
file_2.xml  // Remains unchanged
file_4.xml  // Should be renamed to "file_3.xml"
file_9.xml  // Should be renamed to "file_4.xml"
file_12.xml // Should be renamed to "file_5.xml"

Как я могу это сделать? Я хочу создать надежный метод очистки, который переименовывает файлы по порядку.

До сих пор:

private void updateFilesName() {
    for (int i = 1; i <= filesAmount; i++) {
        File file1 = new File(getFilesDir().getParent() + "/file_" + i + ".xml");
        File file2 = new File(getFilesDir().getParent() + "/file_" + String.valueOf(i + 1) + ".xml");
        if (!file1.exists() && file2.exists()) {
            file2.renameTo(file1);
        }
    }
}

Но это работает, только если разница между двумя позициями файла была 1. (как между file_2 а также file_4) Этот метод не будет работать для file_9 а также file_12,

2 ответа

Решение
private void updateFilesName() {
    int j;
    for (int i = 1; i <= filesAmount; i++) {
        File file1 = new File(getFilesDir().getParent() + "/file_" + i + ".xml");
        if (!file1.exists()) {
            j = i+1;     
            while (!(new File(getFilesDir().getParent() + "/file_" + j + ".xml")).exists()) {
                j++; 
            }
            (new File(getFilesDir().getParent() + "/file_" + j + ".xml")).renameTo(file1);
        }
    }
}
    // Iterate all files under the directory and check the file name
    File folder = new File("urdirectory");
    File[] listOfFiles = folder.listFiles();


    for (int i = 0; i < listOfFiles.length; i++) {
      if (listOfFiles[i].isFile()) {
        if (!listOfFiles[i].getName().equals("file_" + (i+1) + ".xml")) {
            File tempFile1 = listOfFiles[i];
            File tempFile2 = new File("urdirectory" + "/file_" + String.valueOf(i + 1) + ".xml");
            tempFile.renameTo(tempFile2);
        }
    }
Другие вопросы по тегам