web-dev-qa-db-fra.com

meilleur moyen de renommer un fichier en Java, il y a environ 500 fichiers dans un répertoire

J'ai 500 fichiers pdf dans un répertoire. Je veux supprimer les cinq premiers caractères d'un nom de fichier et le renommer.

11
Suresh S

Exemple de code permettant de renommer la liste des fichiers d’un répertoire donné. Dans l'exemple ci-dessous, c:\Projects\sample est le dossier. Les fichiers répertoriés sous ceux qui ont été renommés en 0.txt, 1.txt, 2.txt, etc.

J'espère que cela résoudra votre problème

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");
    }
}
17
gmhk

quelque chose comme ceci devrait faire (version 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
12
Egnatius

Utilisez File.listFiles(...) pour répertorier les fichiers du répertoire, String.substring(...) pour former les nouveaux noms de fichier et File.rename(...) pour renommer. 

Mais je suggère que votre application vérifie qu’elle peut renommer tous les fichiers sans collision avant de commencer le changement de nom .

Mais le commentaire de @ Pascal est sur place. Java n'est pas l'outil le plus simple pour faire ce genre de chose.

4
Stephen C

Java est un mauvais choix pour ce type de travail. Un meilleur choix serait un langage de script JVM tel que Groovy. Si vous voulez poursuivre cette option

Étape 1:

Téléchargez et installez Groovy

Étape 2:

Démarrer la console groovy

Étape 3:

Exécuter ce 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() 
}     

Je suppose ici que tous les fichiers sont dans le répertoire /path/to/pdf/dir. Si certains d'entre eux se trouvent dans les sous-répertoires de ce répertoire, utilisez File.eachFileRecurse au lieu de File.eachFile.

1
Dónal

Cela modifiera tous les noms de fichiers des dossiers que vous avez mentionnés:

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));
    }

}
0
Ravipati Praveen

Si vous utilisez Windows, utilisez la commande Invite ou un fichier .bat. Windows prend en charge les renommage génériques de manière native au niveau du système d'exploitation, de sorte qu'il sera beaucoup plus rapide que Java, qui doit parcourir tous les noms et émettre des appels de changement de nom pour chacun d'entre eux.

0
user207421

Eh bien, essayez cet exemple de code

import Java.io.File;

public class RenameFile
{ 
   public String callRename(String flname, String fromName, String toName)
   {
      try
      {
         File fe = new File(flname);
         File allFile[] = fe.listFiles();
         for(int a = 0; a < allFile.length; a++)
         {
            String presentName = (allFile[a].toString().replaceAll(fromName, toName));
            allFile[a].renameTo(new File(presentName));
         }
         return allFile + " files renamed successfully.!!!";
      }
      catch(Exception ae)
      {
         return(ae.getMessage());
      }
   }

   public static void main(String[] args)
   {
      RenameFile rf = new RenameFile();
      System.out.println("Java rename files in directory : ");
      String lastResult = rf.callRename("yourpathname", "from", "to");
      System.out.println(lastResult);
   }
}
0
Shiva

Si vous utilisez MacOS X et souhaitez renommer tous les fichiers contenus dans des dossiers et des sous-dossiers à partir d'un lecteur externe, le code ci-dessous fera l'affaire:

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");
        }
    }
}
0
Rodrigo