2010-08-15 5 views
2

J'essaie d'utiliser la méthode renameTo en Java mais elle renvoie juste false et ne déplace pas le fichier.Java - méthode renameTo ne fonctionne pas

Ai-je manqué une étape? Existe-t-il un moyen de savoir pourquoi cela ne déplace pas le fichier? La méthode delete ne fait rien non plus.

Voici mon code montrant comment je l'utilise:

private void archiveOutputFile(File outputFile) { 
    SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddhhmmssS"); 
    String timeStamp = formatter.format(new Date()); 
    String subFolderName = "Archive" + timeStamp; 
    File subFolder = new File(outputFile.getParent(),subFolderName); 
    subFolder.mkdir(); 
    File newFile = new File(subFolder,outputFile.getName()); 
    //outputFile.deleteOnExit(); //Doesn't work, nor does .delete() 
    boolean success = outputFile.renameTo(newFile); 
} 

Voici quelques informations système:

Java: 1.6.0_21; Client VM HotSpot (TM) VM 17.0-b17

Système: Windows XP version 5.1 s'exécutant sur x86; Cp1252; en_US (nb)

+0

Le fichier est probablement verrouillé par le système d'exploitation. Avez-vous également créé le fichier dans votre code? Si oui, l'avez-vous 'close()' (ou le flux y écrivant)? –

+0

Pouvez-vous confirmer que les anciens et les nouveaux fichiers se trouvent sur le même système de fichiers? –

+0

@bart: Je n'ai pas de méthode de fermeture disponible sur le fichier. Je le passe à Weka pour analyser le fichier. Je dois supposer que Weka fermerait le fichier une fois que c'est fait. @Zach: Oui, ils sont sur le même système de fichiers. – Greg

Répondre

5

Vous ne pouvez pas renommer ou supprimer un fichier que Windows considère comme ouvert.

+1

Il s'avère que la classe Weka DataSource à laquelle j'envoyais le fichier bloquait le fichier. J'ai changé pour utiliser un constructeur où je pourrais lui envoyer un flux d'entrée au lieu d'un chemin de fichier et ensuite fermé le flux d'entrée moi-même. Cela a fini par fonctionner. – Greg

+0

Il suffit que le fichier soit ouvert et pas encore fermé. –

0

Je vous recommande de vérifier s'il existe. public boolean exists()

More here

1

Vous devez créer le sous-dossier avant de déplacer le fichier dans ce (uncomment subFolder.mkdir();)

0

cela fonctionne, si je commente dans la ligne

subFolder.mkdir(); 
+0

Bien évidemment, le problème était que le sous-dossier n'existait pas. La méthode 'renameTo()' ne créera pas de répertoires pour vous. –

+0

Je l'ai essayé de cette façon aussi sans aucune chance. (Je viens de mettre à jour la question.) – Greg

Questions connexes