ディレクトリに500個のPDFファイルがあります。ファイル名の最初の5文字を削除して、名前を変更したいと思います。
9 に答える
特定のディレクトリ内のファイルのリストの名前を変更するためのサンプル コード。以下の例で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");
}
}
このようなことを行う必要があります(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
File.listFiles(...)
ディレクトリ内のファイルを一覧表示しString.substring(...)
、新しいファイル名を形成し、名前を変更するために使用しFile.rename(...)
ます。
ただし、名前の変更を開始する前に、競合することなくすべてのファイルの名前を変更できることをアプリケーションで確認することをお勧めします。
しかし、@ Pascalのコメントは的を射ています。Java は、このようなことを行うための最も単純なツールではありません。
Javaは、この種の作業には適していません。はるかに良い選択は、GroovyのようなJVMスクリプト言語です。このオプションを追求したい場合
ステップ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
ください。
これにより、言及したフォルダーのすべてのファイル名が変更されます。
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));
}
}
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");
}
}
}
Windows を使用している場合は、コマンド プロンプトまたは .bat ファイルを使用する必要があります。Windows は、OS レベルでネイティブにワイルドカードの名前変更をサポートしているため、すべての名前を反復処理し、名前ごとに名前変更呼び出しを発行する必要がある Java よりも桁違いに高速です。