[JAVA] Problème de déplacement de fichiers

Problème de déplacement de fichiers [JAVA] - Java - Programmation

Marsh Posté le 25-08-2005 à 14:47:40    

Bonjour,
 
j'ai un petit problème que je n'arrive pas à résoudre. Je souhaite déplacer plusieurs fichiers d'un répertoire à un autre. Le souci, c'est que ca marche pour quelques fichiers, mais pas pour d'autres. J'utilise les deux fonctions suivantes:
 

Code :
  1. public static boolean copyFile(File srcFile, File tgtFile) {
  2.     boolean result = false;
  3.     FileInputStream fis = null;
  4.     FileOutputStream fos = null;
  5.         try {
  6.             tgtFile.createNewFile();
  7.         fis = new FileInputStream(srcFile);
  8.         fos = new FileOutputStream(tgtFile);
  9.         byte buf[] = new byte[512*1024];
  10.         int nbRead;
  11.             while ((nbRead = fis.read(buf)) != -1)
  12.                 fos.write(buf, 0, nbRead);
  13.         result = true;
  14.         } catch (FileNotFoundException fnfe) {
  15.          System.err.println("Error: " + fnfe);
  16.      System.exit(-1);     
  17.     } catch (IOException ioe) {
  18.      System.err.println("Error: " + ioe);
  19.      System.exit(-1);
  20.     } finally {
  21.         try {
  22.             fis.close();
  23.         } catch (Exception e) {
  24.          System.err.println("Error: " + e);
  25.       System.exit(-1);
  26.         }
  27.         try {
  28.             fos.close();
  29.         } catch (Exception e) {
  30.          System.err.println("Error: " + e);
  31.       System.exit(-1);
  32.         }   
  33.     }
  34.     return (result);
  35. } //copyFile(File, File)
  36. public static boolean moveFile(File srcFile, File tgtFile) {
  37.  boolean result = false;
  38.     if (!tgtFile.exists()) {
  39.             result = srcFile.renameTo(tgtFile);
  40.             if (!result) {
  41.                 result = true;
  42.                 result &= copyFile(srcFile, tgtFile);
  43.                 result &= srcFile.delete();
  44.             }
  45.         }
  46.     return (result);
  47. } // moveFile(File, File)


 
Merci pour votre aide  :jap:  

Reply

Marsh Posté le 25-08-2005 à 14:47:40   

Reply

Marsh Posté le 25-08-2005 à 15:07:28    

Pour info, il s'agit de fichiers texte (ASCII) similaire dans leur structure mais pas dans leur contenu.
Ils sont stockés sur mon disque dur. Le déplacement se fait sur la même partition.

Reply

Marsh Posté le 25-08-2005 à 16:22:11    

L'utilisation de la classe FileOutputStream ( input aussi ) n'est pas adaptée à ton cas ( fichier ascii ). Relis la javadoc et pendant que tu y es, va faire un tour sur celle des classes FileReader et FileWriter... Quand tu auras parcouru ce minimum, tu pourras adapter avec de nouvelles classes bufferisée etc.  
Enfin si la méthode renameTo() de la classe File ne fonctionne pas, il faudra chercher l'erreur ailleurs que dans ton code ( nom de fichier, autorisations, filesystem etc . )
Remarque : j'ai déjà eu un problème similaire avec un fichier dans lequel j'écrivais mais pour lequel j'oubliais de flusher le flux.


Message édité par Profil supprimé le 25-08-2005 à 16:23:47
Reply

Marsh Posté le 25-08-2005 à 16:40:16    

Ok, mais ce que je ne comprend pas, c'est pourquoi ca marche pour certains fichiers (qui sont également des fichiers ASCII, même structure mais contenu différent) et pas pour d'autres :??:

Reply

Marsh Posté le 25-08-2005 à 17:09:26    


 :heink:  
y a pas de problème à utiliser des outputstream & inputstream pour faire de la copie de fichier, qu'ils contiennent du texte ou non.  


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 25-08-2005 à 21:37:59    

nookonee a écrit :

Ok, mais ce que je ne comprend pas, c'est pourquoi ca marche pour certains fichiers (qui sont également des fichiers ASCII, même structure mais contenu différent) et pas pour d'autres :??:


t'as lu la javadoc de renameTo ?
http://java.sun.com/j2se/1.5.0/doc [...] a.io.File)
(que tu utilises)
 
... laisse moi deviner, les fichiers pour lesquels ça marche, c'est ceux ou le renameTo passe, et les autres c'est ceux ou tu essaies d'utiliser ta methode copy? Genre, au hasard, ça te serait pas passé par la tête de le voir ou de le mentionner?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-08-2005 à 21:39:00    

benou a écrit :

:heink:  
y a pas de problème à utiliser des outputstream & inputstream pour faire de la copie de fichier, qu'ils contiennent du texte ou non.


... au contraire ...
 
edit-preventif-anti-quiproquo : je veux dire 1) que ça vaut même mieux d'utiliser les streams pour faire de la copie de fichiers à moins qu'on ait envie de se casser le cul à s'assurer qu'on a bien un fichier texte 2) qu'il n'y aucun interet spécifique à utiliser reader/writer pour copier ces mêmes fichiers
 
[:dawao]


Message édité par the real moins moins le 25-08-2005 à 21:40:38

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-08-2005 à 23:24:29    

the real moins moins a écrit :

à moins qu'on ait envie de se casser le cul à s'assurer qu'on a bien un fichier texte


et dans ce cas là faut être sur de le lire dans le bon charset sinon y a un risque de plantage en cas de caractère inconnu dans le charset utilisé ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 25-08-2005 à 23:30:59    

useful link qu'a rien à voir avec le topic, mais pour benou: http://glaforge.free.fr/wiki/index [...] ssEncoding


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 25-08-2005 à 23:39:31    

-- > intéressant :jap:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 25-08-2005 à 23:39:31   

Reply

Marsh Posté le 25-08-2005 à 23:42:31    

:)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-08-2005 à 00:18:02    

the real moins moins a écrit :

t'as lu la javadoc de renameTo ?
http://java.sun.com/j2se/1.5.0/doc [...] a.io.File)
(que tu utilises)
 
... laisse moi deviner, les fichiers pour lesquels ça marche, c'est ceux ou le renameTo passe, et les autres c'est ceux ou tu essaies d'utiliser ta methode copy? Genre, au hasard, ça te serait pas passé par la tête de le voir ou de le mentionner?


 
Désolé de répondre aussi tardivement. J'ai résolu le problème en fin d'après midi. En effet c'était une erreur d'inattention de ma part, la javadoc spécifie bien que le fichier ne peut être déplacé si un fichier du même nom existe déjà dans le dossier destination. Or pour tous les fichiers où le déplacement ne s'est pas effectué, c'était parce qu'il y avait déjà un fichier qui se nommait pareil dans le dossier de destination.
 
En fait pour renommer mes fichiers, je récupèrai le "message time" dans le contenu du fichier source qui indique la date et l'heure de génération dudit fichier source sous la forme YYMMDDhhmmss. Je me servais de ce message time pour nommer mes fichiers destination. mais j'avais pas pris en compte que plusieurs fichiers pouvaient être générés à quelques centièmes de secondes d'intervalles. Du coup certains fichiers avaient le meme message time et forcément le meem nom de destination.

Reply

Marsh Posté le 26-08-2005 à 00:19:32    

[:klem3i1]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed