Copie d'un fichier

Nous allons écrire un programme qui copiera le contenu d'un fichier à l'écran ou dans un autre fichier.

Définition des flots d'entrée et de sortie

Les flots d'entrée et de sortie seront représentés par les variables in de type InputStream et out de type OutputStream. Le programme exigera au moins un paramètre qui sera le nom d'un fichier associé au flot d'entrée. Si un second paramètre est présent il représentera le nom du fichier associé au flot de sortie, sinon on utilisera la console écran représentée par System.out.

On déclare donc :

          InputStream in;
          OutputStream out=System.out;

Pour associer un fichier à un flot on utilise les classes FileInputStream et FileOutputStream.

Ceci nous donne :

           if (args.length>0) in=new FileInputStream(args[0]);
           if (args.length>1) out=new FileOutputStream(args[1]);

La copie

Lorsque les flots ont été initialisés, on réalise la copie du flot entrant dans le flot sortant en utilisant les méthodes int read() qui renvoie l'octet suivant ou -1 si le flot est terminé et void write(int c) qui écrit dans le flot sortant. La copie se fera donc avec l'instruction :

        while ((c=in.read()) != -1) out.write(c);

Fermeture des flots

Les deux flots utilisés doivent être fermés après utilisation avec leur méthode close(). On termine donc avec :

        in.close();
        out.close();

Code du programme

On obtient le programme suivant :

        import java.io.*;

        public class copy {
 
         public static void main(String args[]) {
          InputStream in;
          OutputStream out=System.out;
          int c=0;
          if (args.length==0) {
           System.out.println("Passer un nom de fichier en argument.");
           System.exit(1);
          }
          try {
           if (args.length>0) in=new FileInputStream(args[0]);
           if (args.length>1) out=new FileOutputStream(args[1]);
           while ((c=in.read())!=-1) out.write(c);
           in.close();
           out.close();
          } catch (IOException e) {
           System.out.println(e.toString());
          } 
         }

        }

Notes :

  • nous avons importé le package java.io qui contient les classes représentant des flots.
  • les opérations sur les flots sont susceptibles de provoquer des exceptions de type IOException, nous devons donc les capturer dans une structure try...catch...

    Utilisation du programme

    Après avoir compilé copy.java, entrer la ligne de commande suivante:
    java copy copy.java
    Le contenu de copy.java s'affiche à l'écran.

    Vous pouvez aussi utiliser la commande:
    java copy copy.java sortie.txt
    Un nouveau fichier nommé sortie.txt est créé, il contient la même chose que copy.java.



    Retour au menu