Проблема с программой для переименования файлов

1

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

Ниже приведен метод, который я использую для рандомизации индексов массива файлов с использованием util.Random.

public static File[] RandomizeArray(File[] array){
    Random rgen = new Random();  // Random number generator         

    for (int i=0; i<array.length; i++) {
        int randomPosition = rgen.nextInt(array.length);
        File temp = array[i];
        array[i] = array[randomPosition];
        array[randomPosition] = temp;
    }

    return array;
}

И это мое главное:

 public static void main(String[] argv) throws IOException {

        String absolutePath = "C:\\Users\\test";
        File dir = new File(absolutePath);
        File[] filesInDir = dir.listFiles();

        RandomizeArray(filesInDir);

        for(int j = 0 ; j < filesInDir.length ; j++) {
            String name = filesInDir[j].getName();
            int p = name.indexOf('.');
            String extension = name.substring(p + 1);
            String newName = Integer.toString(j)+"."+extension;
            String newPath = absolutePath + "\\" + newName;
            filesInDir[j].renameTo(new File(newPath));
            System.out.println(name + " changed to " + newName);
        }

    }
} 

Проблема в том, что когда я запускаю его в первый раз в папке "test", все идет гладко, и я получаю папку с файлами типа 0.jpg, 1.mpeg, 2.png и т.д., Но во второй раз есть файлы с одно и то же имя и экземпляры, где, например, от 12.jpg он идет до 14.jpg и пропускает 13.

Я уверен, что это что-то простое, но я не могу понять, что.

Теги:
file

1 ответ

0
Лучший ответ

Я предполагаю, что он не только пропускает некоторые цифры, но и фактически удаляет некоторые файлы! При переименовании файлов вы можете переписать некоторые уже существующие файлы. Возьмите следующий пример: у вас есть 3 файла: 0.jpg, 1.jpg, 2.jpg. Они должны быть переименованы следующим образом (возможный результат вашего перетасовки):

0.jpg -> 1.jpg
1.jpg -> 2.jpg
2.jpg -> 0.jpg

Это будет работать, если все файлы будут переименованы в одно и то же время. Но если они будут переименованы последовательно, первое переименование (0.jpg → 1.jpg) перепишет "старое" 1.jpg. Когда "старый" 1.jpg следует переименовать, на самом деле новый 1.jpg (= old 0.jpg) переименован в 2.jpg, переписав "старый" 2.jpg. И затем этот файл снова будет переименован в 0.jpg. Итак, вы получите только 0.jpg (что в этом случае на самом деле то же самое, что и оригинал 0.jpg), но вы перезаписали и, таким образом, потеряли других.

В зависимости от вашего перетасовки вы можете переписать только некоторые из файлов и, таким образом, просмотреть некоторые числа, пропущенные.

Как его решить? 2 Варианты: 1) переместите файлы в новый каталог, а затем в конце удалите старый каталог (теперь он должен быть пустым, поскольку все файлы были перемещены) и переименуйте новый каталог в имя исходного каталога. 2) сначала переименуйте файлы, чтобы включить некоторый префикс, например "tmp_" + j + "." + extension "tmp_" + j + "." + extension, и после того, как все файлы были переименованы, переименуйте файлы снова, чтобы удалить префикс.

Оба варианта гарантируют, что файл не будет перезаписан случайно.

  • 0
    Спасибо, переименовав файлы временно исправил это, я очень ценю вашу помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню