web-dev-qa-db-fra.com

Comment déplacer un fichier d'un emplacement à un autre en Java?

Comment déplacer un fichier d'un endroit à un autre? Lorsque j'exécute mon programme, tout fichier créé à cet emplacement est automatiquement déplacé vers l'emplacement spécifié. Comment savoir quel fichier est déplacé?

Merci d'avance!

70
pmad
myFile.renameTo(new File("/the/new/place/newName.file"));

File # renameTo fait cela (il peut non seulement renommer, mais aussi se déplacer entre les répertoires, au moins sur le même système de fichiers).

Renomme le fichier désigné par ce chemin abstrait.

De nombreux aspects du comportement de cette méthode sont par nature dépendants de la plate-forme: L'opération de changement de nom peut ne pas être en mesure de déplacer un fichier d'un système de fichiers à un autre, elle peut ne pas être atomique et ne pas réussir si un fichier avec le chemin d'accès abstrait à la destination existe déjà. La valeur de retour doit toujours être vérifiée pour s'assurer que l'opération de changement de nom a réussi. 

Si vous avez besoin d’une solution plus complète (par exemple, vous souhaitez déplacer le fichier d’un disque à l’autre), consultez Apache Commons FileUtils # moveFile

99
Thilo

Avec Java 7 ou plus récent, vous pouvez utiliser Files.move(from, to, CopyOption... options).

Par exemple.

Files.move(Paths.get("/foo.txt"), Paths.get("bar.txt"), StandardCopyOption.REPLACE_EXISTING);

Voir la documentation Files pour plus de détails.

55
micha

Pour déplacer un fichier, vous pouvez également utiliser Jakarta Commons IOs FileUtils.moveFile

En cas d'erreur, il renvoie un IOException. Ainsi, lorsqu'aucune exception n'est générée, vous savez que le fichier a été déplacé.

5
DerMike

Ajoutez simplement les chemins des dossiers source et de destination.

Il déplacera tous les fichiers et dossiers du dossier source vers le dossier de destination

    File destinationFolder = new File("");
    File sourceFolder = new File("");

    if (!destinationFolder.exists())
    {
        destinationFolder.mkdirs();
    }

    // Check weather source exists and it is folder.
    if (sourceFolder.exists() && sourceFolder.isDirectory())
    {
        // Get list of the files and iterate over them
        File[] listOfFiles = sourceFolder.listFiles();

        if (listOfFiles != null)
        {
            for (File child : listOfFiles )
            {
                // Move files to destination folder
                child.renameTo(new File(destinationFolder + "\\" + child.getName()));
            }

            // Add if you want to delete the source folder 
            sourceFolder.delete();
        }
    }
    else
    {
        System.out.println(sourceFolder + "  Folder does not exists");
    }
4
manjeet lama

File.renameTo from Java IO peut être utilisé pour déplacer un fichier en Java. Voir aussi cette SO question .

4
Piotr

Java 6

public boolean moveFile(String sourcePath, String targetPath) {

    File fileToMove = new File(sourcePath);

    return fileToMove.renameTo(new File(targetPath));
}

Java 7 (Utilisation de NIO)

public boolean moveFile(String sourcePath, String targetPath) {

    boolean fileMoved = true;

    try {

        Files.move(Paths.get(sourcePath), Paths.get(targetPath), StandardCopyOption.REPLACE_EXISTING);

    } catch (Exception e) {

        fileMoved = false;
        e.printStackTrace();
    }

    return fileMoved;
}
2
Pranav V R

Vous pouvez exécuter un outil externe pour cette tâche (comme copy dans les environnements Windows), mais pour que le code reste portable, l'approche générale consiste à:

  1. lire le fichier source en mémoire
  2. écrire le contenu dans un fichier du nouvel emplacement
  3. supprimer le fichier source

File#renameTo fonctionnera tant que les emplacements source et cible se trouvent sur le même volume. Personnellement, j'éviterais de l'utiliser pour déplacer des fichiers dans différents dossiers.

2
Andreas_D

Essaye ça :-

  boolean success = file.renameTo(new File(Destdir, file.getName()));
2
Vijay Gupta
Files.move(source, target, REPLACE_EXISTING);

Vous pouvez utiliser l'objet Files

En savoir plus sur Files

1
Daniel Taub

A écrit cette méthode pour faire cette chose sur mon propre projet uniquement avec le fichier de remplacement si la logique y est existante.

// we use the older file i/o operations for this rather than the newer jdk7+ Files.move() operation
private boolean moveFileToDirectory(File sourceFile, String targetPath) {
    File tDir = new File(targetPath);
    if (tDir.exists()) {
        String newFilePath = targetPath+File.separator+sourceFile.getName();
        File movedFile = new File(newFilePath);
        if (movedFile.exists())
            movedFile.delete();
        return sourceFile.renameTo(new File(newFilePath));
    } else {
        LOG.warn("unable to move file "+sourceFile.getName()+" to directory "+targetPath+" -> target directory does not exist");
        return false;
    }       
}
0
Joel M