Ne pas en tenir compte de mon dernier message, j'ai trouvé la source du problème. J'utilise quand b n'existe pas. La raison pour laquelle il n'existe pas est parce qu'il existe un lien symbolique, donc si b est La question est-elle une solution alternative de renommer un fichier en Java à l'aide d'une valeur de chaîne?
Sinon, comment cette procédure de renommée peut-elle être faite différemment? P> p> / usr / nom / fichier / fichier code>, alors b est vraiment
/ mnt / monttest code> car Le lien symbolique est à ce répertoire. P>
5 Réponses :
Le problème n'est pas qu'un lien symbolique est impliqué; Le problème est que vous ne pouvez pas renommer atomiblement entre les systèmes de fichiers. Le méta-problème est que les opérations de fichier Java sont bien conçues et ne jettent pas d'exceptions appropriées et ne fournissent aucun code d'erreur lorsque quelque chose échoue! P>
Que diriez-vous:
a.renameTo(new File("/your/path/here/");
Cela ne fonctionnera pas car le fichier n'existe pas dans le nouveau chemin de fichier ... Le renommer est utilisé de manière à imiter un "MV", en déplaçant essentiellement le fichier d'un répertoire à un autre.
@Hristo: En fait, c'est précisément ce qui m'a causé des problèmes: les personnes décrivant Renameto comme équivalent de "MV". MV est au courant des systèmes de fichiers, tandis que Renameto n'est pas. Si vous essayez de mv d'un disque / une partition à une autre, elle agit comme une séquence CP et RM, que Renameto ne le fait pas.
Je pense que vous confondez des choses. Un java.util.file ne représente pas de fichier sur certains systèmes de fichiers. Il représente un chemin d'accès à un fichier. P>
Un renommé renommerait-le ... si c'était sur le même système de fichiers. P>
Si un renameto () échoue, vous devez le copier sur le nouvel emplacement, puis supprimer l'original. P>
Renommer des fichiers est également des systèmes de fichiers Accross très problématiques. Voir http://bugs.sun.com/bugdatabase/view_bug.do?bug_id = 4073756 . Les commentateurs du rapport de bogue ont publié un exemple de code et soulignaient également que vous pouvez utiliser Process.Exec. Apache Commons IO et Google GUAVA ont également des utilitaires pour déplacer en toute sécurité des fichiers également: P>