L'exemple suivant montre une application qui copie un fichier dans un autre (dont les noms sont donnés sur la ligne de commande), octet par octet ; si les deux noms de fichiers ne sont pas donnés sur la ligne de commande, on utilise les flots standards System.in, et System.out, ce qui est possible car FileOutputStream et PrintStream sont des sous-types de OutputStream.
public static void main(String[] args) throws IOException { InputStream in = System.in; OutputStream out = System.out; if (args.length > 0) in = new FileInputStream(args[0]); if (args.length > 1) out = new FileOutputStream(args[1]); copier(in, out); }
En l'absence de récupération de l'exception IOException, la méthode main doit déclarer qu'elle est susceptible de déclencher cette exception.