8
votes

Renommer un fichier sans utiliser renameto () - Java

Ne pas en tenir compte de mon dernier message, j'ai trouvé la source du problème. J'utilise xxx

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 / usr / nom / fichier / fichier , alors b est vraiment / mnt / monttest car Le lien symbolique est à ce répertoire.

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?


0 commentaires

5 Réponses :


3
votes

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!


0 commentaires

1
votes

Que diriez-vous:

a.renameTo(new File("/your/path/here/");


2 commentaires

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.



4
votes

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.


0 commentaires

5
votes

Un renommé renommerait-le ... si c'était sur le même système de fichiers.

Si un renameto () échoue, vous devez le copier sur le nouvel emplacement, puis supprimer l'original.


0 commentaires

5
votes

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:


0 commentaires