Лучший способ в java переименовать файл, в каталоге содержится около 500 файлов

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

Ответ 1

Пример кода для переименования списка файлов в данном каталоге. В приведенном ниже примере c:\Projects\sample - это папка, файлы, перечисленные в ней, были переименованы в 0.txt, 1.txt, 2.txt и т.д.

Я надеюсь, что это решит вашу проблему.

import java.io.File;
import java.io.IOException;

public class FileOps {


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

        File folder = new File("\\Projects\\sample");
        File[] listOfFiles = folder.listFiles();

        for (int i = 0; i < listOfFiles.length; i++) {

            if (listOfFiles[i].isFile()) {

                File f = new File("c:\\Projects\\sample\\"+listOfFiles[i].getName()); 

                f.renameTo(new File("c:\\Projects\\sample\\"+i+".txt"));
            }
        }

        System.out.println("conversion is done");
    }
}

Ответ 2

что-то вроде этого должно делать (версия Windows):

import java.io.*;

public class RenameFile {
    public static void main(String[] args) {
        // change file names in 'Directory':
        String absolutePath = "C:\\Dropbox\\java\\Directory";
        File dir = new File(absolutePath);
        File[] filesInDir = dir.listFiles();
        int i = 0;
        for(File file:filesInDir) {
            i++;
            String name = file.getName();
            String newName = "my_file_" + i + ".pdf";
            String newPath = absolutePath + "\\" + newName;
            file.renameTo(new File(newPath));
            System.out.println(name + " changed to " + newName);
        }
    } // close main()
} // close class

Ответ 3

Используйте File.listFiles(...), чтобы перечислить файлы в каталоге, String.substring(...), чтобы сформировать новые имена файлов, и File.rename(...), чтобы выполнить переименование.

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

Но комментарий @Pascal находится на месте. Java - не самый простой инструмент для такого рода вещей.

Ответ 4

Java - плохой выбор для такого рода работ. Гораздо лучший выбор - это язык сценариев JVM, например Groovy. Если вы хотите использовать эту опцию

Шаг 1:

Загрузите и установите Groovy

Шаг 2:

Запустите консоль groovy

Шаг 3:

Запустите этот script

def dirName = "/path/to/pdf/dir"

new File(dirName).eachFile() { file -> 
    def newName = file.getName()[5..-1]
    File renamedFile = new File(dirName + "/" + newName)
    file.renameTo(renamedFile)

    println file.getName() + " -> " + renamedFile.getName() 
}     

Я предполагаю, что все файлы находятся в каталоге /path/to/pdf/dir. Если некоторые из них находятся в подкаталогах этого каталога, используйте File.eachFileRecurse вместо File.eachFile.

Ответ 5

Если вы находитесь в Windows, вы должны использовать командную строку или файл .bat. Windows поддерживает подстановочные переименования изначально на уровне ОС, поэтому она будет на порядок быстрее, чем Java, которая должна перебирать все имена и вызывать вызовы переименования для каждого из них.

Ответ 6

Если вы находитесь на MacOS X и хотите переименовать все файлы внутри папок и подпапок с внешнего накопителя, код ниже выполнит задание:

public class FileOps {

    public static void main(String[] argv) throws IOException {
        String path = "/Volumes/FAT32/direito_administrativo/";
        File folder = new File(path);
        changeFilesOfFolder(folder);
    }

    public static void changeFilesOfFolder(File folder) {
        File[] listOfFiles = folder.listFiles();

        if (listOfFiles != null) {
            int count = 1;
            for (int i = 0; i < listOfFiles.length; i++) {
                if (listOfFiles[i].isFile()) {
                    File f = new File(folder.getPath() + "/" + listOfFiles[i].getName()); 
                    f.renameTo(new File(folder.getPath() + "/" + count + ".flv"));
                    count++;                    
                } else if (listOfFiles[i].isDirectory()) {
                    changeFilesOfFolder(listOfFiles[i]);
                }
            }
        } else {
            System.out.println("Path without files");
        }
    }
}

Ответ 7

Это изменит все имена файлов указанных вами папок:

for (int i = 0; i < folders.length; i++) {
    File folder = new File("/home/praveenr/Desktop/TestImages/" + folders[i]);
    File[] files2 = folder.listFiles();

    int count = 1;
    for (int j = 0; j <files2.length; j++,count++) {
        System.out.println("Old File Name:" + files2[j].getName());
        String newFileName = "/home/praveenr/Desktop/TestImages/" + folders[i]+"/file_"+count+"_original.jpg";
        System.out.println("New FileName:" + newFileName);
        files2[j].renameTo(new File(newFileName));
    }

}