import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StreamTokenizer; import java.net.MalformedURLException; import java.net.URL; import java.util.Scanner; import java.util.StringTokenizer; // Exemple de lecture de fichiers et d'agrandissement dynamique de tableaux // très fortement inspiré de Weiss figure 2.4 page 40. public class TestFichiers { // exemple de lecture sur stdin, fichier et URL // exemples d'appel: // java TestFichiers // java TestFichiers - // java TestFichiers ents // java TestFichiers 'http://www.iro.umontreal.ca/~lapalme/Programmes/Java/entiers.txt' // ces appels peuvent être suivis d'un chiffre entre 1 et 4 pour contrôler le type d'input attendu public static void main(String args[]) { try { InputStream ins; // détermination de l'input if (args.length==0 || args[0].equals("-")) ins = System.in; else if (args[0].startsWith("http:")) ins = new URL(args[0]).openStream(); else ins = new FileInputStream(args[0]); String modeLecture = "1"; if(args.length>1){ modeLecture=args[1]; } // choix d'un mode de lecture int [] entiers = modeLecture.equals("1")?getInts1(ins): modeLecture.equals("2")?getInts2(ins): modeLecture.equals("3")?getInts3(ins): getInts4(ins); // impression des entiers lus System.out.println(entiers.length + " entiers lus en mode "+modeLecture); for(int i=0;i0 ){ try{ inputVal = Integer.parseInt( oneLine.trim() ); if( itemsRead == array.length ) array = resize(array, array.length * 2); array[itemsRead++] = inputVal; } catch (NumberFormatException e){ System.out.println(oneLine+":entree erronée"); } if (prompt){System.out.print("? ");System.out.flush();} } } catch (IOException e) { System.out.println("getInts:Erreur d'entrée-sortie"); System.exit(1); } return resize( array, itemsRead ); } /* lecture d'un tableau d'entiers sur un fichier plusieurs par ligne * on ignore les valeurs qui ne sont pas des entiers * on affiche un "prompt" si nécessaire */ public static int [] getInts2(InputStream in){ int inputVal = 0; int [] array = new int[ 5 ]; int itemsRead = 0; String oneLine; StringTokenizer lecteur; BufferedReader stdin = new BufferedReader( new InputStreamReader(in)); boolean prompt = in == System.in; if (prompt){System.out.print("? ");System.out.flush();} try { // lire jusqu'à la fin de fichier ou une ligne vide while( (oneLine = stdin.readLine()) != null && oneLine.length()>0 ){ lecteur = new StringTokenizer(oneLine); int nb = lecteur.countTokens(); for(int i=0;i