web-dev-qa-db-ja.com

Javaを使用してファイルの名前を変更する

test.txtというファイル名をtest1.txtに変更できますか?

test1.txtが存在する場合、名前は変更されますか?

Test.txtの新しい内容が後で使用できるように追加されるように、既存のtest1.txtファイルに名前を変更する方法を教えてください。

150
Shekhar

http://exampledepot.8waytrips.com/egs/Java.io/RenameFile.html からコピーされた

// File (or directory) with old name
File file = new File("oldname");

// File (or directory) with new name
File file2 = new File("newname");

if (file2.exists())
   throw new Java.io.IOException("file exists");

// Rename file (or directory)
boolean success = file.renameTo(file2);

if (!success) {
   // File was not successfully renamed
}

新しいファイルに追加するには

Java.io.FileWriter out= new Java.io.FileWriter(file2, true /*append=yes*/);
160
Pierre

要するに:

Files.move(source, source.resolveSibling("newname"));

より詳しく:

import Java.nio.file.Files;
import Java.nio.file.Path;
import Java.nio.file.Paths;

以下は、 http://docs.Oracle.com/javase/7/docs/api/index.html から直接コピーされたものです。

ファイルを "newname"に変更して、ファイルを同じディレクトリに保存したいとします。

Path source = Paths.get("path/here");
Files.move(source, source.resolveSibling("newname"));

あるいは、ファイルを新しいディレクトリに移動し、同じファイル名を保持し、そのディレクトリ内のその名前の既存のファイルを置き換えるとします。

Path source = Paths.get("from/path");
Path newdir = Paths.get("to/path");
Files.move(source, newdir.resolve(source.getFileName()), REPLACE_EXISTING);
83
kr37

File オブジェクトで renameTo メソッドを利用したいとします。

まず、保存先を表すFileオブジェクトを作成します。そのファイルが存在するかどうか確認してください。存在しない場合は、移動するファイルに対して新しいFileオブジェクトを作成します。移動するファイルでrenameToメソッドを呼び出し、renameToからの戻り値を調べて呼び出しが成功したかどうかを確認します。

あるファイルの内容を別のファイルに追加したい場合は、多数のライターが利用可能です。拡張子に基づいて、それはプレーンテキストのように聞こえるので、私は FileWriter を見てみましょう。

27
Thomas Owens

Java 1.6以下では、これに対する最も安全で最もクリーンなAPIはGuavaの Files.move であると思います。

例:

File newFile = new File(oldFile.getParent(), "new-file-name.txt");
Files.move(oldFile.toPath(), newFile.toPath());

最初の行は、新しいファイルの場所が同じディレクトリ、つまり古いファイルの親ディレクトリであることを確認します。

EDIT:私はJava 7を使い始める前にこれを書きました。あなたがJava 7+を使っているのであれば、あなたはkr37の答えを見て、評価するべきです。

24
Zoltán

ファイルを新しい名前に移動して名前を変更します。 (FileUtilsはApache Commons IO libからのものです)

  String newFilePath = oldFile.getAbsolutePath().replace(oldFile.getName(), "") + newName;
  File newFile = new File(newFilePath);

  try {
    FileUtils.moveFile(oldFile, newFile);
  } catch (IOException e) {
    e.printStackTrace();
  }
18
Branflake2267

これはファイルの名前を変更する簡単な方法です。

        File oldfile =new File("test.txt");
        File newfile =new File("test1.txt");

        if(oldfile.renameTo(newfile)){
            System.out.println("File renamed");
        }else{
            System.out.println("Sorry! the file can't be renamed");
        }
13
senior
import Java.nio.file.Files;
import Java.nio.file.Path;
import Java.nio.file.Paths;
import static Java.nio.file.StandardCopyOption.*;

Path yourFile = Paths.get("path_to_your_file\text.txt");

Files.move(yourFile, yourFile.resolveSibling("text1.txt"));

既存のファイルを "text1.txt"という名前で置き換えるには:

Files.move(yourFile, yourFile.resolveSibling("text1.txt"),REPLACE_EXISTING);
3
Kirill Ch

ファイル名を変更するだけの場合は、 File.renameTo() を使用できます。

2番目のファイルの内容を最初のファイルに追加する場合は、 追加コンストラクタオプションを指定したFileOutputStream または FileWriterも同じ を参照してください。追加するにはファイルの内容を読み、出力ストリーム/ライターを使って書き出す必要があります。

3
Dan Vinton

これを試して

File file=new File("Your File");
boolean renameResult = file.renameTo(new File("New Name"));
// todo: check renameResult

注: renameToの戻り値をチェックして、ファイル名の変更が成功したことを確認する必要があります。これはプラットフォームによって異なり(オペレーティングシステム、ファイルシステムによって)、IOがスローされないためです。名前の変更に失敗した場合は例外です。

3
anoopknr

私の知る限りでは、ファイルの名前を変更しても、ターゲットの名前を持つ既存のファイルの内容にその内容が追加されることはありません。

Javaでのファイル名の変更については、クラスFilerenameTo()メソッドについての documentation を参照してください。

2
Yuval

はい、File.renameTo()を使用できます。しかし、新しいファイルに名前を変更するときは正しいパスを指定してください。

import Java.util.Arrays;
import Java.util.List;

public class FileRenameUtility {
public static void main(String[] a) {
    System.out.println("FileRenameUtility");
    FileRenameUtility renameUtility = new FileRenameUtility();
    renameUtility.fileRename("c:/Temp");
}

private void fileRename(String folder){
    File file = new File(folder);
    System.out.println("Reading this "+file.toString());
    if(file.isDirectory()){
        File[] files = file.listFiles();
        List<File> filelist = Arrays.asList(files);
        filelist.forEach(f->{
           if(!f.isDirectory() && f.getName().startsWith("Old")){
               System.out.println(f.getAbsolutePath());
               String newName = f.getAbsolutePath().replace("Old","New");
               boolean isRenamed = f.renameTo(new File(newName));
               if(isRenamed)
                   System.out.println(String.format("Renamed this file %s to  %s",f.getName(),newName));
               else
                   System.out.println(String.format("%s file is not renamed to %s",f.getName(),newName));
           }
        });

    }
}

}

2
V1ma-8

フォルダ内の複数のファイルの名前を変更するための私のコードは次のとおりです。

public static void renameAllFilesInFolder(String folderPath, String newName, String extension) {
    if(newName == null || newName.equals("")) {
        System.out.println("New name cannot be null or empty");
        return;
    }
    if(extension == null || extension.equals("")) {
        System.out.println("Extension cannot be null or empty");
        return;
    }

    File dir = new File(folderPath);

    int i = 1;
    if (dir.isDirectory()) { // make sure it's a directory
        for (final File f : dir.listFiles()) {
            try {
                File newfile = new File(folderPath + "\\" + newName + "_" + i + "." + extension);

                if(f.renameTo(newfile)){
                    System.out.println("Rename succesful: " + newName + "_" + i + "." + extension);
                } else {
                    System.out.println("Rename failed");
                }
                i++;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}

そして例として実行します。

renameAllFilesInFolder("E:\\Downloads\\Foldername", "my_avatar", "gif");
1
Tạ Anh Tú
Files.move(file.toPath(), fileNew.toPath()); 

ただし、すべての使用済みリソース(InputStreamFileOutputStreamなど)を閉じた(または自動クローズした)場合にのみ機能します。file.renameToまたはFileUtils.moveFileでも同じ状況が考えられます。