// Exemple de lecture de fichiers et d'agrandissement dynamique de tableaux // très fortement inspiré de Weiss figure 2.4 page 40. import java.io.InputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.FileNotFoundException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.Reader; import java.io.StreamTokenizer; import java.net.URL; import java.net.MalformedURLException; import java.net.URL; import java.util.StringTokenizer; public class TestFichiers { // exemple de lecture sur stdin, fichier et URL // exemples d'appel: // java TestFichiers - 2 // java TestFichiers ents // java TestFichiers 'http://www.iro.umontreal.ca/~lapalme/ift1020/ents' public static void main(String args[]) { try { int modeLecture = 1; int [] entiers = new int[0]; 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]); if (args.length>1) try { int i = new Integer(args[1]).intValue(); if(i>=1&&i<=3)modeLecture=i; } catch (NumberFormatException e){} System.out.println("mode de lecture="+modeLecture); switch (modeLecture) { case 1 : entiers = getInts1(ins);break; case 2 : entiers = getInts2(ins);break; case 3 : entiers = getInts3(ins);break; } // impression des entiers lus System.out.println(entiers.length + " entiers lus"); 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