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. p>
mais parfois le fichier n'est pas renommé! p>
J'ai essayé d'ajouter un peu de thread.sleep (Big_Number) entre le couple de tentatives cela n'a pas aidé. P>
On dirait que le fichier reçoit une sorte de serrure. (Quand je tue la JVM, je peux renommer le fichier). P>
Y a-t-il quelque chose que je peux faire? P>
OS: Windows XP, Windows 7 Version Java: 1.5 P>
5 Réponses :
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();
}
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.
pour le fichier fichier.renameto () code> Pour fonctionner, le fichier doit être en quelque sorte écritable par des applications externes. P>
Vous pouvez également faire quelque chose comme ci-dessous: Comment savoir pourquoi Renameto () a échoué? P> Fichier.Renameto () alternative sur Windows? P> http: // www. bigsoft.co.uk/blog/index.php/2010/02/02/file-Renameto-always-Fails-on-windows P> P> n.delete () code>: nous devons supprimer le fichier (nouveau.txt) s'il existe. < /p >p>
Code ,Rename(n) code>: de sorte que le fichier (old.txt) est renommé comme neuf.txt p>
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)?
Nous avons eu des problèmes sous Windows 7 avec UAC et des autorisations de fichier inattendues. File # CANWRITE CODE> reviendra TRUE même si toutes les tentatives d'exécution d'E / S échouera. P>
BTW, CANWRITE retourne true
"File # CANWRITE retournera true code> même si toutes les tentatives d'exécution d'E / S échouera" i> - Nous expérimenons une situation sous Windows 7 où le fichier Code> n'a pas pu détecter les restrictions de l'UAC, de sorte que la méthode renvoyée true code>, 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.
Cela fonctionne bien pour moi. Renommer est fait en utilisant deux étapes mais n'oubliez pas de définir des autorisations dans manifeste.xml code> avec:
Quel système d'exploitation utilisez-vous?
Pouvez-vous poster le code que vous utilisez?