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


173

ファイルの名前を変更できますか test.txttest1.txt

もし test1.txt、それは名前が変更されますが存在しますか?

既存のtest1.txtファイルに名前を変更して、test.txtの新しいコンテンツを追加して後で使用できるようにするにはどうすればよいですか?


6
最後の段落では、名前変更操作についてまったく説明していません。追加操作について説明します。
ローン侯爵

回答:


172

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*/);

24
このコードは、すべてのケースまたはプラットフォームで機能するわけではありません。メソッドの名前変更は、信頼できるものではありません。stackoverflow.com/questions/1000183/...
ステファングルニエ

Path方法だけが私のために働いており、renameTo常にfalseを返します。kr37の回答またはこの回答の
andras

107

要するに:

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);

1
Pathは、WindowsPath、ZipPath、およびAbstractPathのみが実装されているインターフェイスです。これはマルチプラットフォーム実装の問題でしょうか?
Caelum

1
こんにちは@ user2104648、ここ(tutorials.jenkov.com/java-nio/path.html)は、Linux環境でファイルを処理する方法に関する例です。基本的に、言及した実装の1つを使用する代わりに、java.nio.file.Paths.get(somePath)を使用する必要があります
maxivis

2
パスソース= ...とは
Koray Tugay

@ kr37完璧な答え!
gaurav

30

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

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

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


9
わかりませんが、ピエールが投稿したものとまったく同じですが、ソースコードはありません...
Thomas Owens

28

Java 1.6 以前場合、最も安全でクリーンなAPIはGuavaのFiles.moveだと思います。

例:

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

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

編集: Java 7を使い始める前にこれを書いたので、非常によく似たアプローチが導入されました。したがって、Java 7以降を使用している場合は、kr37の回答を確認して賛成投票する必要があります。


18

新しい名前に移動してファイルの名前を変更します。(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();
  }

13

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

        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");
        }

5
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);

5

これを試して

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

注: renameToの戻り値を常に確認して、名前変更ファイルがプラットフォームに依存している(オペレーティングシステムが異なる、ファイルシステムが異なる)ため、名前変更が失敗してもIO例外をスローしないため、ファイル名が正常であることを確認する必要があります。


これは、9年前にピエールが受け取った回答とどう違うのですか?
飼料

4

はい、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));
           }
        });

    }
}

}


3

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

2番目のファイルの内容を最初のファイルに追加する場合は、追加コンストラクタオプション使用してFileOutputStreamを確認する、FileWriterについて同じことを行います。ファイルの内容を読み取って追加し、出力ストリーム/ライターを使用してそれらを書き出す必要があります。


2

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

Javaでのファイル名の変更については、クラスのメソッドのドキュメントをご覧ください。renameTo()File


1
Files.move(file.toPath(), fileNew.toPath()); 

近いあなた(またはオートクローズ)ALLは、リソース(使用のみ動作しますが、InputStreamFileOutputStreamなど)私は同じような状況だと思います file.renameToFileUtils.moveFile


1

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

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");

-2

実行中のコードはこちらです。

private static void renameFile(File fileName) {

    FileOutputStream fileOutputStream =null;

    BufferedReader br = null;
    FileReader fr = null;

    String newFileName = "yourNewFileName"

    try {
        fileOutputStream = new FileOutputStream(newFileName);

        fr = new FileReader(fileName);
        br = new BufferedReader(fr);

        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            fileOutputStream.write(("\n"+sCurrentLine).getBytes());
        }

        fileOutputStream.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            fileOutputStream.close();
            if (br != null)
                br.close();

            if (fr != null)
                fr.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

2
通常は、匿名コードのいくつかの行を投稿するだけでなく、解決策を説明する方が良いでしょう。どのようにすれば良い答えを書くことができ、また完全にコードベースの答えを説明する
Anh Pham

通常、コピーと名前変更は異なる操作であるため、これがコピーであることを明確に示す必要があります。これは、バイトではなく文字をコピーするため、不必要に遅くなることもあります。
Joel Klinghed、2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.