Лучший способ переименовать файл в Java, это около 500 файлов в каталоге - PullRequest
11 голосов
/ 27 апреля 2010

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

Ответы [ 8 ]

18 голосов
/ 28 апреля 2010

Пример кода для переименования списка файлов в заданном каталоге. В приведенном ниже примере 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");
    }
}
12 голосов
/ 19 марта 2014

что-то подобное должно сделать (версия для 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
4 голосов
/ 27 апреля 2010

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

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

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

1 голос
/ 27 апреля 2010

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

Шаг 1:

Скачать и установить Groovy

Шаг 2:

Запустите заводную консоль

Шаг 3:

Запустить этот скрипт

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.

0 голосов
/ 14 марта 2018

Хорошо, попробуйте этот пример кода

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 голосов
/ 27 июля 2016

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

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 голосов
/ 13 декабря 2014

Если вы работаете в 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");
        }
    }
}
0 голосов
/ 28 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...