web-dev-qa-db-ja.com

Javaファイルの名前を変更するには、ディレクトリに約500個のファイルがあります。

ディレクトリに500個のPDFファイルがあります。ファイル名の最初の5文字を​​削除して名前を変更したい。

11
Suresh S

特定のディレクトリにあるファイルのリストの名前を変更するためのサンプルコード。以下の例では、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");
    }
}
19
gmhk

このようなことをする必要があります(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

File.listFiles(...)を使用してディレクトリ内のファイルをリストし、String.substring(...)を使用して新しいファイル名を作成し、File.rename(...)を使用して名前を変更します。

ただし、アプリケーションですべてのファイルの名前を衝突なしに変更できることをアプリケーションに確認することをお勧めします名前の変更を開始する前に

しかし、@ Pascalのコメントは適切です。 Javaは、この種のことを行うための最も単純なツールではありません。

4
Stephen C

これにより、言及したフォルダのすべてのファイル名が変更されます。

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

Windowsを使用している場合は、コマンドプロンプトまたは.batファイルを使用する必要があります。 Windowsはワイルドカードの名前変更をOSレベルでネイティブにサポートしているため、Javaよりも桁違いに高速であり、Javaはすべての名前を反復処理し、それぞれに対して名前変更呼び出しを発行する必要があります。

0
user207421

Javaは、この種の作業には不適切です。より良い選択は、GroovyのようなJVMスクリプト言語です。このオプションを追求したい場合

ステップ1:

Groovyをダウンロードしてインストールする

ステップ2:

Groovyコンソールを起動する

ステップ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
Dónal

さて、このサンプルコードを試してください

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

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
Rodrigo