Nous allons écrire un programme qui copiera le contenu d'un fichier à l'écran ou dans un autre fichier.
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]);
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);
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();
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 :
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.