4 votes

Comment renommer un fichier vers un autre système de fichiers ?

J'ai rencontré un problème étrange lors de l'utilisation de renameTo(). Je ne sais pas pourquoi je ne peux pas renommer en /mnt/desttest mais il est possible de le renommer en /home/kit.ho/desttest . Cependant, j'ai déjà donné à tous les droits d'écriture sur /mnt/. La valeur de retour est false sans raison particulière. Qui connaît la raison ?

import java.io.File;
public class renameFile {
    public static void main(String[] args) {
        File sourceFile = new File("/home/kit.ho/test");  
        File targetFile1 = new File("/mnt/desttest");  
        System.out.println("source file is exist? " + sourceFile.exists() + ", source file => " + sourceFile);  
        System.out.println(targetFile1 + " is exist? " + targetFile1.exists());  
        System.out.println("rename to " + targetFile1 + " => " + sourceFile.renameTo(targetFile1));  
        System.out.println("source file is exist? " + sourceFile.exists() + ", source file => " + sourceFile);   
    }
}

Edit : Enfin, d'après certaines réponses, la fonction Rename ne fonctionne pas sur les systèmes de fichiers croisés. Existe-t-il un moyen de contourner ce problème en n'appelant pas de commande externe telle que "mv" ?

7voto

jdigital Points 7425

Vous ne pouvez pas renommer des systèmes de fichiers (partitions).

4voto

jirka.pinkas Points 209

Créer une méthode pour copier le fichier et appeler cette méthode (c'est ce que j'utilise lorsque renameTo() ne fonctionne pas) :

void copyFile(File source, File destination) throws Exception {
  FileInputStream inputStream = new FileInputStream(source);
  FileOutputStream outputStream = new FileOutputStream(destination);
  int b = -1;
  while ((b = inputStream.read()) != -1) {
    outputStream.write(b);
  }
  inputStream.close();
  outputStream.close();
}

edit : si vous voulez déplacer le fichier, supprimez l'original après avoir fait une copie.

edit : encore mieux serait FileUtils.moveFile() de la bibliothèque Apache Commons

3voto

musiKk Points 6933

Une solution simple pour ne pas réinventer la roue serait d'utiliser Apache Commons IO. Il dispose de FileUtils#moveFile() qui se charge de gérer les différentes partitions.

1voto

File.renameTo peut échouer si vous vous déplacez d'un système de fichiers à l'autre ou si vous essayez d'écraser un fichier existant. Voir l'article documents .

Vous pouvez également avoir un problème car /mnt est un fichier lieu à usage spécifique et peuvent avoir d'autres attributs qui vous empêchent de déplacer quelque chose dans /mnt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X