8
votes

File.Rrenameto () échoue

J'ai une application Eclipse Plugin Jface. Un fil écrit un fichier via BufferedWriter. Une fois écrit terminé, je ferme le tampon après cela, j'essaie de renommer le fichier.

mais parfois le fichier n'est pas renommé!

J'ai essayé d'ajouter un peu de thread.sleep (Big_Number) entre le couple de tentatives cela n'a pas aidé.

On dirait que le fichier reçoit une sorte de serrure. (Quand je tue la JVM, je peux renommer le fichier).

Y a-t-il quelque chose que je peux faire?

OS: Windows XP, Windows 7 Version Java: 1.5


2 commentaires

Quel système d'exploitation utilisez-vous?


Pouvez-vous poster le code que vous utilisez?


5 Réponses :


15
votes

file.renameto () est dépendante de la plate-forme et repose sur quelques conditions à remplir afin de renommer avec succès un fichier, une meilleure alternative utilise

Path source = currentFile.toPath();
try {
     Files.move(source, source.resolveSibling(formattedName));
} catch (IOException e) {
     e.printStackTrace();
}


1 commentaires

Travaillé comme un charme sur ma fenêtre 7 - surtout lors de l'ajout de l'option remplaçable_existing et éventuellement l'option atomic_move. Merci.



0
votes

pour le fichier fichier.renameto () Pour fonctionner, le fichier doit être en quelque sorte écritable par des applications externes.


0 commentaires

0
votes

Vous pouvez également faire quelque chose comme ci-dessous: xxx

n.delete () : nous devons supprimer le fichier (nouveau.txt) s'il existe. < /p >p>
Code ,Rename(n) : de sorte que le fichier (old.txt) est renommé comme neuf.txt

Comment savoir pourquoi Renameto () a échoué?

Fichier.Renameto () alternative sur Windows?

http: // www. bigsoft.co.uk/blog/index.php/2010/02/02/file-Renameto-always-Fails-on-windows


1 commentaires

Je vais essayer d'utiliser le Supprimer en premier, mais si la suppression échoue (si le fichier est verrouillé, je ne pourrai pas la supprimer)?



0
votes

Nous avons eu des problèmes sous Windows 7 avec UAC et des autorisations de fichier inattendues. File # CANWRITE reviendra TRUE même si toutes les tentatives d'exécution d'E / S échouera.

  1. Assurez-vous que le fichier que vous essayez de renommer existe réellement
  2. Assurez-vous que l'emplacement que vous essayez d'écrire le fichier (ou de renommer le fichier) est accessible. Nous écrivons un fichier texte simple à l'emplacement. Vérifiez s'il existe si elle existe et que son contenu est correct (nous sommes paranoïdes) avant de tenter d'autres E / S.

3 commentaires

BTW, CANWRITE retourne true


"File # CANWRITE retournera true même si toutes les tentatives d'exécution d'E / S échouera" - Nous expérimenons une situation sous Windows 7 où le fichier n'a pas pu détecter les restrictions de l'UAC, de sorte que la méthode renvoyée true , toute tentative d'exécution d'E / S de fichier dans l'emplacement spécifié échouerait (généralement en silence)


Le seul travail des circonstructions que nous avons proposé est 1- Écrivez un fichier temporaire et vérifiez que c'est existez et il est que le contenu est correct ou 2- Copiez le fichier manuellement. Java 7 (apparemment) fixe les problèmes avec l'UAC, mais nous n'avons pas eu la chance de le tester.



0
votes

Cela fonctionne bien pour moi. Renommer est fait en utilisant deux étapes mais n'oubliez pas de définir des autorisations dans manifeste.xml avec: xxx


0 commentaires