У меня есть 500 PDF файлов в каталоге. Я хочу удалить первые пять символов имени файла и переименовать его.
Лучший способ в java переименовать файл, в каталоге содержится около 500 файлов
Ответ 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));
}
}