web-dev-qa-db-fra.com

Renommer un fichier avec Java

Pouvons-nous renommer un fichier avec test.txt en test1.txt?

Si test1.txt existe-t-il renommer? 

Comment le renommer en fichier test1.txt existant afin que le nouveau contenu de test.txt y soit ajouté pour une utilisation ultérieure?

148
Shekhar

Copié à partir de 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
}

Pour ajouter au nouveau fichier:

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

En bref:

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

Plus de détails:

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

Ce qui suit est directement copié de http://docs.Oracle.com/javase/7/docs/api/index.html :

Supposons que nous voulions renommer un fichier en "nouveau nom", en le gardant dans le même répertoire:

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

Sinon, supposons que nous voulions déplacer un fichier dans un nouveau répertoire en conservant le même nom de fichier et en remplaçant tout fichier existant de ce nom dans le répertoire:

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

Vous souhaitez utiliser la méthode renameTo sur un objet File .

Commencez par créer un objet File pour représenter la destination. Vérifiez si ce fichier existe. S'il n'existe pas, créez un nouvel objet File pour le fichier à déplacer. appelez la méthode renameTo sur le fichier à déplacer et vérifiez la valeur renvoyée par renameTo pour savoir si l'appel a abouti.

Si vous souhaitez ajouter le contenu d'un fichier à un autre, un certain nombre d'écrivains sont disponibles. Basé sur l'extension, cela ressemble à du texte brut, donc je regarderais le FileWriter .

27
Thomas Owens

Pour Java 1.6 et les versions antérieures, l’API la plus sûre et la plus propre à cet égard est celle de Files.move de Guava.

Exemple:

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

La première ligne permet de s’assurer que le nouveau fichier est dans le même répertoire, c’est-à-dire le répertoire parent de l’ancien fichier.

EDIT: J'ai écrit ceci avant de commencer à utiliser Java 7, qui introduisait une approche très similaire. Donc, si vous utilisez Java 7+, vous devriez voir et augmenter la réponse de kr37.

24
Zoltán

Renommer le fichier en le déplaçant vers un nouveau nom. (FileUtils provient d'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();
  }
17
Branflake2267

C'est un moyen facile de renommer un fichier:

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

Pour remplacer un fichier existant par le nom "text1.txt": 

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

S'il s'agit simplement de renommer le fichier, vous pouvez utiliser File.renameTo () .

Dans le cas où vous souhaitez ajouter le contenu du deuxième fichier au premier, consultez FileOutputStream avec l'option d'ajout constructeur ou La même chose pour FileWriter . Vous aurez besoin de lire le contenu du fichier à ajouter et de l'écrire à l'aide du flux de sortie/scripteur.

3
Dan Vinton

Essaye ça

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

Remarque: Nous devrions toujours vérifier la valeur renameTo afin de nous assurer que le changement de nom est réussi car il dépend de la plate-forme (système d'exploitation différent, système de fichiers différent) et il ne lève pas d'exception IO si renommer échoue.

3
anoopknr

Pour autant que je sache, renommer un fichier ne va pas ajouter son contenu à celui d'un fichier existant portant le nom de la cible.

Pour renommer un fichier en Java, consultez la documentation pour connaître la méthode renameTo() de la classe File.

2
Yuval

Oui, vous pouvez utiliser File.renameTo (). Mais souvenez-vous d'avoir le bon chemin lorsque vous le renommez en un nouveau fichier.

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

    }
}

}

1
V1ma-8

Voici mon code pour renommer plusieurs fichiers dans un dossier avec succès:

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

}

et lancez-le pour un exemple:

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

fonctionne, mais seulement lorsque vous fermez (ou autoclose) TOUTES les ressources utilisées (InputStream, FileOutputStream etc.) Je pense que la même situation se présente avec file.renameTo ou FileUtils.moveFile.