Peut-on copier un répertoire entier ?

Peut-on copier un répertoire entier ? - Java - Programmation

Marsh Posté le 06-01-2004 à 21:20:18    


Salut à tous,
 
J'aurais voulu savoir si il existait en JAVA une méthode qui permet de copier un répertoire entier (avec des fichiers et des sous-répertoires) ?
 
 
Merci

Reply

Marsh Posté le 06-01-2004 à 21:20:18   

Reply

Marsh Posté le 06-01-2004 à 21:39:03    

oui


---------------
yvele n'est plus.
Reply

Marsh Posté le 06-01-2004 à 21:44:40    

Reply

Marsh Posté le 06-01-2004 à 21:45:00    

ben quoi.. on peux le faire [:sinclaire]


---------------
yvele n'est plus.
Reply

Marsh Posté le 06-01-2004 à 21:47:33    

Mr yvele a écrit :

ben quoi.. on peux le faire [:sinclaire]


 
ne te fais pas plus con que tu n'es, veux tu? :o

Reply

Marsh Posté le 06-01-2004 à 22:32:36    

Je comprends pas bien, on peut ou on peut pas ?
C'est peut-être possible mais compliqué ... ???

Reply

Marsh Posté le 06-01-2004 à 22:46:49    

peon3 a écrit :

Je comprends pas bien, on peut ou on peut pas ?
C'est peut-être possible mais compliqué ... ???


 
Il n'y a déjà pas de méthode dans l'API pour copier un fichier, alors un répertoire :D
 
pour copier rep1 vers rep2 Tu dois:
 
# mkdir de rep2 (File destDir = new File(rep2); destDir.mkdirs(); )
# Choper la liste des fichiers (rep1.listFiles() )
# Pour chaque fichier (attention un File peut etre un fichier ou un répertoire voir les méthodes isFile() et isDirectory()), lire le contenu et l'écrire dans le rép destination
 

Reply

Marsh Posté le 07-01-2004 à 07:17:09    

Ok, merci, je vais essayer tout ça ...

Reply

Marsh Posté le 07-01-2004 à 08:25:12    

le principe est pas dur, maintenant si ta jamais touché à l'acces fichier en java faudra lire un peu la doc stou :)

Reply

Marsh Posté le 07-01-2004 à 09:46:49    

Y a pas longtemps dans un post java j'ai filé le code pour faire une copie de fichier ... je sais plus trop quel post mais ca doit se retrouver ...
 
après avec une petite fonction recursive, ca se fait très vite.

Reply

Marsh Posté le 07-01-2004 à 09:46:49   

Reply

Marsh Posté le 07-01-2004 à 10:36:00    

En effet, j'ai retrouvé le post pour copier un fichier --> Merci.
 
 
Sinon, j'ai entendu parler de "star" ou "webstar" qui parmettait de faire ce genre de choses, si qq'un connaît ....

Reply

Marsh Posté le 07-01-2004 à 10:38:04    

Non ... mais c'est telement facile que vraiment, tu peux coder toi même, hein !


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

Marsh Posté le 07-01-2004 à 11:30:38    

allez, c'est cado !
 

Code :
  1. package utils;
  2. import java.io.*;
  3. public class FileUtils {
  4.  
  5. public static void copy(final InputStream inStream, final OutputStream outStream, final int bufferSize) throws IOException {
  6.  final byte[] buffer = new byte[bufferSize];
  7.  int nbRead;
  8.  while ((nbRead = inStream.read(buffer)) != -1) {
  9.   outStream.write(buffer, 0, nbRead);
  10.  }
  11. }
  12.    
  13. public static void copyDirectory(final File from, final File to) throws IOException {
  14.  if (! to.exists()) {
  15.   to.mkdir();
  16.  }
  17.  final File[] inDir = from.listFiles();
  18.  for (int i = 0; i < inDir.length; i++) {
  19.   final File file = inDir[i];
  20.   copy(file, new File(to, file.getName()));
  21.  }
  22. }
  23. public static void copyFile(final File from, final File to) throws IOException {
  24.  final InputStream inStream = new FileInputStream(from);
  25.  final OutputStream outStream = new FileOutputStream(to);
  26.  copy(inStream, outStream, (int) Math.min(from.length(), 4*1024));
  27.  inStream.close();
  28.  outStream.close();
  29. }
  30. public static void copy(final File from, final File to) throws IOException {
  31.  if (from.isFile()) {
  32.   copyFile(from, to);
  33.  } else if (from.isDirectory()){
  34.   copyDirectory(from, to);
  35.  } else {
  36.   throw new FileNotFoundException(from.toString() + " does not exist" );
  37.  }
  38. }


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

Marsh Posté le 07-01-2004 à 11:31:10    

peon3 a écrit :

En effet, j'ai retrouvé le post pour copier un fichier --> Merci.


ouais, sauf qu'il était buggué mon code  :whistle:


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

Marsh Posté le 07-01-2004 à 14:01:53    

Ouah, merci beaucoup, je vais essayer ça dans la journée.
 
Merci à tous pour votre participation !!!

Reply

Marsh Posté le 07-01-2004 à 17:03:28    

Ca marche nickel.
 
Juste une petite remarque, lorsque l'on veut copier un fichier vide, on entre dans une boucle infinie, j'ai modifier de cette façon :
 
----------------------------------------------------------------
public static void copyFile(final File from, final File to) throws IOException {
      final InputStream inStream = new FileInputStream(from);
      final OutputStream outStream = new FileOutputStream(to);
      if (from.length() > 0){
        copy(inStream, outStream, (int) Math.min(from.length(), 4*1024));
      }
      inStream.close();
      outStream.close();
   }
----------------------------------------------------------------
 
 
Une autre remarque, lorsqu'un fichier de destination existe déjà et qu'il est en "lecture seule", ça ne fonctionne pas.
Dans mon cas, j'ai fait un "delete" du fichier du répertoire de  destination puis une copie à partir de la source.
 
 
Maintenant j'ai un prog qui marche comme je le voulais.
 
Merci à tous !!!
 :p ,  :sol:  

Reply

Marsh Posté le 07-01-2004 à 19:01:00    

peon3 a écrit :

Ca marche nickel.
Juste une petite remarque, lorsque l'on veut copier un fichier vide, on entre dans une boucle infinie


Ha oui tiens  :whistle:  
j'avais pas pensé à ce cas là ...
 

peon3 a écrit :


Une autre remarque, lorsqu'un fichier de destination existe déjà et qu'il est en "lecture seule", ça ne fonctionne pas.
Dans mon cas, j'ai fait un "delete" du fichier du répertoire de  destination puis une copie à partir de la source.


ouais, j'ai pas traité ce genre de cas là.
Y a d'autres cas :  

  • le cas où dans le répertoire de destination, y a un répertoire du même nom qu'un fichier du répertoire source.
  • les cas de droits droits d'accès (ton exemple est un de ces cas)
  • le cas où le répertoire de destination n'existe pas
  • peut être d'autres trucs auxquels j'ai pas pensé. J'ai codé ca vite...


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

Marsh Posté le 07-01-2004 à 19:06:49    

benou ton code il copie pas les sous dirs, là nan


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

Marsh Posté le 07-01-2004 à 19:07:37    

et c'est quoi le but de tous ces final à part fait warrior?


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

Marsh Posté le 07-01-2004 à 19:16:31    

the real moins moins a écrit :

et c'est quoi le but de tous ces final à part fait warrior?


 
et c'est quoi le but de ta question à part fait warrior?


Message édité par EpoK le 07-01-2004 à 19:17:50
Reply

Marsh Posté le 07-01-2004 à 19:17:07    

EpoK a écrit :


 
et c'est quoi le but de ta question à part fait warrior?
 

savoir pourquoi benou avait foutu des final partout, va te faire foutre s'il te plait :)


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

Marsh Posté le 07-01-2004 à 19:18:12    

the real moins moins a écrit :

savoir pourquoi benou avait foutu des final partout, va te faire foutre s'il te plait :)


 
 :lol:  
 
 
mais de meme cher ami

Reply

Marsh Posté le 07-01-2004 à 19:19:10    

et je vois pas bien ou est la boucle pour les fichiers vide :??:


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

Marsh Posté le 07-01-2004 à 19:42:20    

the real moins moins a écrit :

et je vois pas bien ou est la boucle pour les fichiers vide :??:


taille de buffer à 0 ;)


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

Marsh Posté le 07-01-2004 à 19:42:47    

the real moins moins a écrit :

benou ton code il copie pas les sous dirs, là nan


ben si.. c'est récursif [:skeye]


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

Marsh Posté le 07-01-2004 à 19:43:54    

the real moins moins a écrit :

et c'est quoi le but de tous ces final à part fait warrior?


nan, c'est bien pour faire warrior :)
 
en fait, je me demande si dans la pratique ca a une utilité réelle  :??:


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

Marsh Posté le 07-01-2004 à 20:19:03    


Si si, ce code sert à qq chose :
 
Ca me sert à faire un programme d'update.
En effet, j'ai besoin de faire un petit programme qui me permet de mettre à jour une version antérieure à mon programme principal, et il est hors de question que j'en achète un ou même en prendre un gratuit car je veux être sûr de ce que le programme fait.
 

Reply

Marsh Posté le 07-01-2004 à 20:23:03    

peon3 a écrit :


Si si, ce code sert à qq chose :


on parlait du mot clef "final" :)


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

Marsh Posté le 07-01-2004 à 20:30:53    

Oupssss.....  :sweat:  
C'est le dernier post avant le mien qui m'a induit en erreur.
 
désolé  :jap:

Reply

Marsh Posté le 07-01-2004 à 20:46:27    

benou a écrit :


ben si.. c'est récursif [:skeye]


 
....
non rien  
[:neowen]

Reply

Marsh Posté le 07-01-2004 à 23:13:03    

benou a écrit :


ben si.. c'est récursif [:skeye]

ha oui ça y est j'ai vu !
faut dire que tes methodes sont dans un ordre bizarre et qu'elles ont toutes le meme nom, pas évident pour s'y retrouver ;)
(et qu'a mon avis on aurait pu se passer de certaines d'entres elles, ou les mettre en private :o)

Reply

Marsh Posté le 07-01-2004 à 23:26:52    

the real moins moins a écrit :

ha oui ça y est j'ai vu !
faut dire que tes methodes sont dans un ordre bizarre et qu'elles ont toutes le meme nom, pas évident pour s'y retrouver ;)
(et qu'a mon avis on aurait pu se passer de certaines d'entres elles, ou les mettre en private :o)


bha non, pkoi les mettres en private ? c'est une classe utilitaire et toutes ces méthodes ont une utilitée [:spamafote]

Reply

Marsh Posté le 08-01-2004 à 01:10:30    

le copyDirectory n'est d'aucune utilité en public, doublon avec copy(File, File)


Message édité par the real moins moins le 08-01-2004 à 01:11:07
Reply

Marsh Posté le 08-01-2004 à 02:29:29    

the real moins moins a écrit :

le copyDirectory n'est d'aucune utilité en public, doublon avec copy(File, File)


mais ils font pas la même chose ...
 
copy(File, File) ca peux prendre en paramêtre des fichier ou des répertoire (des File quoi). Alors que copyDirectory ne doit prendre que des repertoires.

Reply

Marsh Posté le 08-01-2004 à 09:45:58    

benou a écrit :


mais ils font pas la même chose ...
 
copy(File, File) ca peux prendre en paramêtre des fichier ou des répertoire (des File quoi). Alors que copyDirectory ne doit prendre que des repertoires.

ben sauf que copyDirectory ne verifie pas qu'on lui passe effectivement des repertoire, et que copy par contre, delegue simplement à copyDirectory si on lui passe un repertoire, d'ou l'inutilité de la public-ité de copyDirectory [:spamafote]

Reply

Marsh Posté le 08-01-2004 à 10:09:20    

the real moins moins a écrit :

ben sauf que copyDirectory ne verifie pas qu'on lui passe effectivement des repertoire, et que copy par contre, delegue simplement à copyDirectory si on lui passe un repertoire, d'ou l'inutilité de la public-ité de copyDirectory [:spamafote]


et ben mets le en private si ca te fait plaisir ...
moi si j'ai copyFile, je préfère avoir à côté copyDirectory, je trouve ca plus clair ...


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

Marsh Posté le 08-01-2004 à 10:12:01    

t'es pas obligé de le prendre pour toi, c'était une tentative de remarque constructive. si tu veux rien entendre, m'en fous, j't'ai pas attendu pour savoir copier un répertoire en java [:boidleau]

Reply

Marsh Posté le 08-01-2004 à 10:12:34    

(en fait jmettrais copyFile en private aussi pour la meme raison tiens)

Reply

Marsh Posté le 08-01-2004 à 10:20:15    

the real moins moins a écrit :

(en fait jmettrais copyFile en private aussi pour la meme raison tiens)


 :pfff:


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

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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