Commande copy

Commande copy - Java - Programmation

Marsh Posté le 02-01-2004 à 15:17:07    

Bonjour,  
Je cherche à écrire la comme copy (ou cp ) en java.
Je ne trouve pas de méthode parmettant cela
(genre static boolean copy(string f1, string s2))
Quelqun a til une udée?
 
(je n'ai rien trouvé dans les precedants posts non plus)
 
Merci bcp!

Reply

Marsh Posté le 02-01-2004 à 15:17:07   

Reply

Marsh Posté le 02-01-2004 à 15:43:26    

Code :
  1. public static void copyFileBuffered(final String currentFile, final String newFile, final int bufferSize) throws FileNotFoundException, IOException {
  2.     final BufferedReader in = new BufferedReader(new FileReader(currentFile), bufferSize * 1024);
  3.     try {
  4.       final BufferedWriter out = new BufferedWriter(new FileWriter(newFile), bufferSize * 1024);
  5.       try {
  6.         int s = in.read();
  7.         while(s != -1) {
  8.           out.write(s);
  9.           s = in.read();
  10.         }//end while
  11.         out.flush();
  12.       } finally {
  13.         out.close();
  14.       }//end try
  15.     } finally {
  16.       in.close();
  17.     }//end try
  18.   }//end copyFileBuffered


---------------
Light is right
Reply

Marsh Posté le 02-01-2004 à 16:35:16    

Il ne faut pas utiliser un Reader pour lire le fichier, mais un InputStream. De même, il faut utiliser un OutputStream, et pas un Writer pour écrire. Les Reader/Writer sont faits uniquement pour le texte.

Code :
  1. public static void copyFileBuffered(final String currentFile, final String newFile, final int bufferSize) throws FileNotFoundException, IOException {
  2.    final BufferedInputStream in = new BufferedInputStream(new FileInputStream(currentFile), bufferSize * 1024);
  3.    try {
  4.      final BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(newFile), bufferSize * 1024);
  5.      try {
  6.        int s = in.read();
  7.        while(s != -1) {
  8.          out.write(s);
  9.          s = in.read();
  10.        }//end while
  11.        out.flush();
  12.      } finally {
  13.        out.close();
  14.      }//end try
  15.    } finally {
  16.      in.close();
  17.    }//end try
  18. }//end copyFileBuffered

Reply

Marsh Posté le 03-01-2004 à 01:04:14    

ben dis donc, merci les gars.
Mé pkoi on spécifie une tailee de buffer ? c nécaissaire? ca optimise?

Reply

Marsh Posté le 03-01-2004 à 01:06:57    

c'est sensé optimiser, mais comme les entrée-sorties sont déjà bufferisées par le système, ça doit pas changer énormément.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 03-01-2004 à 01:13:52    

oki c bien ce que je pensé. et il me semble que 1024 c le nombre par défaut.  
Mé je pense qu'a partir dun certains nombre ca devient moins otpimisé? genre je met 32 ko? ou bien plus encore
 
ah oui pi encore un truc, les final c obligé?
et le bloc finally aussi? pkoi?


Message édité par meumeul le 03-01-2004 à 01:15:55
Reply

Marsh Posté le 03-01-2004 à 01:16:38    

la dernière fois, j'ai entendu parler de 4 ou 8ko, mais je me souviens plus de l'OS/plateforme.
de toutes façon 1Ko c'est ridicule, 8-10ko c'est le mini pour voir un peu de différence je pense.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 07-01-2004 à 11:29:03    

Code :
  1. package utils;
  2. import java.io.*;
  3. public class StreamUtils {
  4. public static void copy (final InputStream inStream, final OutputStream outStream, final int bufferSize) throws IOException {
  5.  final byte[] buffer = new byte[bufferSize];
  6.  int nbRead;
  7.  while ((nbRead = inStream.read(buffer)) != -1) {
  8.   outStream.write(buffer, 0, nbRead);
  9.  }
  10. }
  11. public static void copy (final File from, final File to) throws IOException {
  12.  final InputStream inStream = new FileInputStream(from);
  13.  final OutputStream outStream = new FileOutputStream(to);
  14.  copy(inStream, outStream, (int) Math.min(from.length(), 4*1024));
  15.  inStream.close();
  16.  outStream.close();
  17. }
  18. }


 
edit : closage de stream !  :fou:
edit2 : encore une coorrection de  bug :fou: :fou:


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

Sujets relatifs:

Leave a Replay

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