Docstoc

Les Fichiers Textes

Document Sample
Les Fichiers Textes Powered By Docstoc
					www.9ra.info       Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                        http://www.pdfmail.com




               Lecture et écriture dans un
                    fichier de texte
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info              Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                               http://www.pdfmail.com



     Exemple de création et d’écriture d’un fichier texte
     import java.io.* ;
     public class Creation
     { public static void main (String args[]) throws IOException
       {
           String nomfich ;
           int n ;
           System.out.print ("Donnez le nom du fichier a creer : ") ;
           nomfich = Clavier.lireString() ;
        PrintWriter sortie = new PrintWriter (new FileWriter (nomfich)) ;
www.9ra.info                     Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                      http://www.pdfmail.com



     do
              { System.out.print ("donnez un entier : ") ;
                  n = Clavier.lireInt() ;
                  if (n != 0)
                  { sortie.println (n + " a pour carre " + n*n) ;
                  }
              }
             while (n != 0) ;
             sortie.close () ;
             System.out.println ("*** fin creation fichier ***");
         }
     }
www.9ra.info                Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                 http://www.pdfmail.com


     Exemple de lecture d’un fichier texte
     import java.io.* ;
     public class Lecftxt1
     { public static void main (String args[]) throws IOException
       {
           String nomfich ;
           String ligne ;
           int n ;
           System.out.print ("Donnez le nom du fichier a lister : ") ;
           nomfich = Clavier.lireString() ;
     BufferedReader entree = new BufferedReader (new FileReader
     (nomfich)) ;
www.9ra.info                     Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                      http://www.pdfmail.com



         do
                  { ligne = entree.readLine() ;
                      if (ligne != null) System.out.println (ligne) ;
                  }
                 while (ligne != null) ;
                 entree.close () ;
                 System.out.println ("*** fin liste fichier ***");
             }
         }
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com




     import java.io.*;
     public class Pg1 {
     public static void main(String [] args) {
     String l, w, filename;
     BufferedReader f, keyboard;
     try {
     keyboard = new BufferedReader(new
     InputStreamReader(System.in));
     System.out.print("Entrer le nom du fichier : ");
     filename = keyboard.readLine();
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com

         f = new BufferedReader(new FileReader(filename));
         l = f.readLine();
         while (l != null) {
         if (l.charAt(0)=='#')
         System.out.println("----------");
         else
         System.out.println(l);
         l = f.readLine();
         }
         f.close();}
         catch (IOException e) {System.out.println("Erreur: " +
         e);}}}
www.9ra.info                     Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                      http://www.pdfmail.com



                                              La classe Clavier
          import java.io.* ;
          public class Clavier
          { public static String lireString () // lecture d'une chaine
           { String ligne_lue = null ;
               try
               { InputStreamReader lecteur = new InputStreamReader (System.in) ;
                   BufferedReader entree = new BufferedReader (lecteur) ;
                   ligne_lue = entree.readLine() ;
               }
               catch (IOException err)
               { System.exit(0) ;
               }
               return ligne_lue ; }
www.9ra.info                   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                    http://www.pdfmail.com



         public static float lireFloat () // lecture d'un float
          { float x=0 ; // valeur a lire
               try
               { String ligne_lue = lireString() ;
                   x = Float.parseFloat(ligne_lue) ;
               }
               catch (NumberFormatException err)
               { System.out.println ("*** Erreur de donnee ***") ;
                   System.exit(0) ;
               }
               return x ;
          }
www.9ra.info                  Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                   http://www.pdfmail.com



          public static double lireDouble () // lecture d'un double
           { double x=0 ; // valeur a lire
               try
               { String ligne_lue = lireString() ;
                   x = Double.parseDouble(ligne_lue) ;
               }
               catch (NumberFormatException err)
               { System.out.println ("*** Erreur de donnee ***") ;
                   System.exit(0) ;
               }
               return x ;
           }
www.9ra.info                   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                    http://www.pdfmail.com



         public static int lireInt ()                     // lecture d'un int
          { int n=0 ; // valeur a lire
               try
               { String ligne_lue = lireString() ;
                   n = Integer.parseInt(ligne_lue) ;
                   }
               catch (NumberFormatException err)
               { System.out.println ("*** Erreur de donnee ***") ;
                   System.exit(0) ;
               }
               return n ;
          }
www.9ra.info                  Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                   http://www.pdfmail.com



         // programme de test de la classe Clavier
            public static void main (String[] args)
            { System.out.println ("donnez un flottant") ;
                float x ;
                x = Clavier.lireFloat() ;
                System.out.println ("merci pour " + x) ;
                System.out.println ("donnez un entier") ;
                int n ;
                n = Clavier.lireInt() ;
                System.out.println ("merci pour " + n) ;
            }
        }
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com




                        La classe StringTokenizer
         Dans certains cas, vous pourrez avoir besion d’accéder à
         chacune des informations d’une même ligne.
         Java dispose d’une classe utilitaire nommée StringTokenizer,
         qui permet de découper une chaîne en différents tokens (sous-
         chaînes), en se fondant sur la présence d’un caractère
         séparateur qu’on choisit librement.
         Par ailleurs, on pourra appliquer à ces différents tokens, les
         possibilités de conversion d’une chaine en type primitif, ce
         permettra d’obtenir les valeurs voulues.
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com
www.9ra.info            Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                             http://www.pdfmail.com




         Exemple 1
         Supposons que nous disposions d’un fichier texte nommé
         reels.txt, contenant des nombres flottants répartis d’une
         manière qlq, c-à-d que chaque ligne peut en comporter un ou
         plusieurs espaces de séparation entre les nombres sauvegardés.
         Nous allons réaliser un programme, qui effectue l’affichage à
         l’écran de ces différents nombres, et qui en calcule la somme.
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com




        import java.io.* ;
        import java.util.* ; // pour StringTokenizer
        public class Lectxt3
        { public static void main (String args[]) throws IOException
          { String nomfich ;
           double x, som = 0. ;
           System.out.print ("donnez le nom du fichier a lister : ") ;
           nomfich = Clavier.lireString() ;
          BufferedReader entree = new BufferedReader (new
        FileReader (nomfich)) ;
        System.out.println ("Flottants contenus dans le fichier " +
        nomfich + " :") ;
www.9ra.info                Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                                 http://www.pdfmail.com



          while (true)
               { String ligneLue = entree.readLine() ;
          if (ligneLue == null) break ;
          StringTokenizer tok = new StringTokenizer (ligneLue, " ") ;
          int nv = tok.countTokens() ;
          for (int i=0 ; i<nv ; i++)
                { x = Double.parseDouble (tok.nextToken()) ;
                  som += x ;
                  System.out.println (x + " ") ;
                } } entree.close () ;
          System.out.println ("somme des nombres = " + som) ;
               System.out.println ("*** fin liste fichier ***"); }}
www.9ra.info           Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                            http://www.pdfmail.com




         Exemple 2
         import java.util.StringTokenizer; import java.io.*;
         public class Pg2 {
         public static void main(String [] args) {
         String l, w, filename;
         StringTokenizer st;
         BufferedReader f, keyboard;
         try {
         keyboard = new BufferedReader(new
         InputStreamReader(System.in));
         System.out.print("Entrer le nom du fichier : ");
         filename = keyboard.readLine();
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com



     f = new BufferedReader(new FileReader(filename));
     l = f.readLine();
     while (l != null) {
     st = new StringTokenizer(l);
     while (st.hasMoreTokens()) {
     System.out.print("(" + st.nextToken() + ")");
     }
     System.out.println();
     l = f.readLine();
     }f.close();}
     catch (IOException e) {
     System.out.println("Erreur: " + e);}}}
www.9ra.info      Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                       http://www.pdfmail.com




               Gestion de fichiers

                La classe File
www.9ra.info        Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                         http://www.pdfmail.com




        • La gestion de fichiers se fait par l’intermédiaire
        de la classe java.io.File.
        • Cette classe possède des méthodes qui
        permettent d’interroger ou d’agir sur le système
        de fichiers du système d’exploitation.
        • Un objet de la classe java.io.File peut
        représenter un fichier ou un répertoire.
www.9ra.info           Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                            http://www.pdfmail.com

     Le terme de fichier est pris dans son sens le plus général.
     Les principaux contructeurs et méthodes de cette classe sont :

     File(File rep, String nom)
     File(String chemin)
     File(String rep, String nom)
     public String getName() retourne le nom du fichier (sans le
     nom du répertoire)

     public String getParent() retourne le nom du répertoire père
     ou null quand le nom du fichier est donné sans répertoire ou quand
     ce fichier se trouve dans le répertoire racine du système de fichiers.

     public boolean exists() retourne true si le fichier existe, false
     sinon.
www.9ra.info            Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                             http://www.pdfmail.com


     public boolean canWrite() retourne true si l'utilisateur peut
     écrire dans le fichier, false sinon.

     public boolean canRead() retourne true si l'utilisateur peut
     lire dans le fichier, false sinon.

     public boolean isFile() retourne true si le fichier est un fichier
     "normal" (pas un répertoire, ...), false sinon.

     public boolean isDirectory() retourne true si le fichier est un
     répertoire, false sinon.

     public long length() retourne la taille du fichier.
     public boolean mkdir() crée un répertoire et retourne true si
     la création s'est bien effectuée.
     boolean mkdirs() création du répertoire avec création des répertoire
     manquant dans l'arborescence du chemin
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com




         public String[] list() retourne la liste des noms de fichiers
         (excepté . et ..) contenus dans l'instance (qui doit être un
         répertoire).

         public String[] list(FilenameFilterfiltre) retourne la
         liste des noms de fichiers respectant le filtre contenus dans
         l'instance (qui doit être un répertoire).

         boolean createNewFile() création d'un nouveau fichier
         vide.

         File createTempFile(String, String) création d'un
         nouveau fichier dans le répertoire par défaut des fichiers
         temporaires. Les deux arguments sont le préfixe et le suffixe du
         fichier.

         File createTempFile(String, String, File) création
         d'un nouveau fichier temporaire. Les trois arguments sont le
         préfixe et le suffixe du fichier et le répertoire.
www.9ra.info           Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                            http://www.pdfmail.com


     boolean delete() détruire le fichier ou le repertoire. Le booléen
     indique le succés de l'opération.

     deleteOnExit() demande la suppression du fichier à l'arrêt de la
     JVM

     String getAbsolutePath() renvoie le chemin absolu du fichier
     String getPath() renvoie le chemin du fichier
     boolean isAbsolute() indique si le chemin est absolu
     boolean renameTo() renommer le fichier
www.9ra.info           Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                            http://www.pdfmail.com




        Les fichiers et les répertoires sont encapsulés dans la
        classe File du package java.io. Il n'existe pas de classe
        pour traiter les répertoires car ils sont considérés comme
        des fichiers. Une instance de la classe File est une
        représentation logique d'un fichier ou d'un répertoire qui
        peut ne pas exister physiquement sur le disque.
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com



     Exemple 1
     import java.io.*;
     public class TestFile {
     protected String nomFichier;
     protected File fichier;
     public TestFile(String nomFichier) {
     this.nomFichier = nomFichier;
     fichier = new File(nomFichier);
     traitement();
     }
     public static void main(String args[]) {
     new TestFile(args[0]);}
www.9ra.info            Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                             http://www.pdfmail.com

     private void traitement() {
     if (!fichier.exists()) {
     System.out.println("le fichier "+nomFichier+"n'existe pas");
     System.exit(1);}
     System.out.println(" Nom du fichier : "+fichier.getName());
     System.out.println(" Chemin du fichier : "+fichier.getPath());
     System.out.println(" Chemin absolu :
     "+fichier.getAbsolutePath());
     System.out.println(" Droit de lecture : "+fichier.canRead());
     System.out.println(" Droite d'ecriture : "+fichier.canWrite());
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com




         if (fichier.isDirectory() ) {
         System.out.println(" contenu du repertoire ");
         String fichiers[] = fichier.list();
         for(int i = 0; i <fichiers.length; i++)
         System.out.println(" "+fichiers[i]);}}}
www.9ra.info          Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                           http://www.pdfmail.com



     Exemple 2
     public class TestFile_12 {
     protected String nomFichier;
     protected File fichier;
     public TestFile_12(String nomFichier) {
     this.nomFichier = nomFichier;
     fichier = new File(nomFichier);
     traitement();
     }
     public static void main(String args[]) {
     new TestFile_12(args[0]);
     }
www.9ra.info            Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                             http://www.pdfmail.com

     private void traitement() {
     if (!fichier.exists()) {
     System.out.println("le fichier "+nomFichier+"n'existe pas");
     System.exit(1);
     }
     System.out.println(" Nom du fichier : "+fichier.getName());
     System.out.println(" Chemin du fichier : "+fichier.getPath());
     System.out.println(" Chemin absolu :
     "+fichier.getAbsolutePath());
     System.out.println(" Droit de lecture : "+fichier.canRead());
     System.out.println(" Droite d'ecriture : "+fichier.canWrite());
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com



         if (fichier.isDirectory() ) {
         System.out.println(" contenu du repertoire ");
         File fichiers[] = fichier.listFiles();
         for(int i = 0; i <fichiers.length; i++) {
         if (fichiers[i].isDirectory())
         System.out.println(" ["+fichiers[i].getName()+"]");
         else
         System.out.println(" "+fichiers[i].getName());
         }}}}
www.9ra.info       Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                        http://www.pdfmail.com




               Vérification et création
                   de répertoires
www.9ra.info     Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                      http://www.pdfmail.com




     La classe File est bien plus qu’une
     représentation d’un fichier ou d’un répertoire
     existant. Vous pouvez aussi utiliser un objet
     File pour créer un nouveau répertoire ou un
     chemin complet de répertoire si ils n’existent
     pas.
     Vous pouvez également regarder les
     caractéristiques des fichiers (taille, dernière
     modification, date, lecture/écriture), voir si un
     objet File représente un fichier ou un
     répertoire, et supprimer un fichier.
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com

     import java.io.*;
     public class asmae {
     private final static String usage =
     "Usage:MakeDirectories path1 ...\n" +
     "Creates each path\n" +
     "Usage:MakeDirectories -d path1 ...\n" +
     "Deletes each path\n" +
     "Usage:MakeDirectories -r path1 path2\n" +
     "Renames from path1 to path2\n";
     private static void usage() {
     System.err.println(usage);
     System.exit(1);}
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com




        private static void fileData(File f) {
        System.out.println(
        "Absolute path: " + f.getAbsolutePath() +
        "\n Can read: " + f.canRead() +
        "\n Can write: " + f.canWrite() +
        "\n getName: " + f.getName() +
        "\n getParent: " + f.getParent() +
        "\n getPath: " + f.getPath() +
        "\n length: " + f.length() +
        "\n lastModified: " + f.lastModified());
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com

     if(f.isFile()) System.out.println("it's a file");
     else if(f.isDirectory())
     System.out.println("it's a directory"); }
     public static void main(String[] args) {
     if(args.length < 1) usage();
     if(args[0].equals("-r")) {
     if(args.length != 3) usage();
     File old = new File(args[1]),
     rname = new File(args[2]);
     old.renameTo(rname);
     fileData(old);
     fileData(rname); return; // Sortie de main }
www.9ra.info            Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                             http://www.pdfmail.com

     int count = 0;
     boolean del = false;
     if(args[0].equals("-d")) {
     count++;
     del = true;}
     for( ; count < args.length; count++) {
     File f = new File(args[count]);
     if(f.exists()) {
     System.out.println(f + " exists");
     if(del) {
     System.out.println("deleting..." + f);
     f.delete();}}
www.9ra.info           Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                            http://www.pdfmail.com

     else { // N’existe pas
     if(!del) {
     f.mkdirs();
     System.out.println("created " + f);
     }
     }
     fileData(f);
     }
     }
     } ///:~
www.9ra.info          Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                           http://www.pdfmail.com



     Dans fileData() vous pourrez voir diverses méthodes
     d’investigation de fichier employées pour afficher les
     informations sur le fichier ou sur le chemin du répertoire.
     La première méthode pratiquée par main() est renameTo(),
     laquelle vous permet de renommer (ou déplacer) un
     fichier vers un nouveau chemin de répertoire signalé par
     l’argument, qui est un autre objet File. Ceci fonctionne
     également avec des répertoire de n’importe quelle longueur.
     Si vous expérimentez avec le programme ci-dessus, vous
     découvrirez que vous pouvez créer un chemin de
     répertoire de n’importe quelle complexité puisque mkdirs()
     s’occupera de tout.(seulement pour linux mais le windows il faut
     créer un nouveau repertoire).
www.9ra.info   Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                    http://www.pdfmail.com




               Sérialisation
www.9ra.info       Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                        http://www.pdfmail.com




          üTechnique très simple pour sauver des
          objets dans un fichier.
          üFichiers dépendent de la JVM.
          üLes classe sauvées, directement ou
          indirectement doivent implémenter
          Serializable .
          class MaClasse implements Serializable
          {// …}
www.9ra.info            Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                             http://www.pdfmail.com




          La classe ObjectOutputStream
          La classe ObjectOutputStream permet de sérialiser des
          objets et accessoirement des données issues des types de base
          (int, byte, char, double, float…). Son constructeur admet
          comme argument
          un FileOutputStream.
          class AutreClasse
          {
          MaClasse mc = new MaClasse() ; // instance de la
          classe MaClasse
          public AutreClasse() { // constructeur de la classe
          autreClasse
          try {
www.9ra.info          Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                           http://www.pdfmail.com



     // créer un nouveau fichier
     FileOutputStream fos = new
     FileOutputStream("monFichier.dat");
     // ce fichier stockera des objets
     ObjectOutputStream oos = new ObjectOutputStream(fos);
     oos.writeObject(mc); // on écrit l’objet mc dans le flux oos
     oos.close() ; //fermer le flux
     // ObjectOutputStream susceptible de générer des exceptions
     } catch(IOException err) { }
     }
     }
www.9ra.info             Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                              http://www.pdfmail.com



     La classe ObjectInputStream
     ObjectInputStream sert à récupérer des objets sérialisés. Elle
     fonctionne de façon similaire à ObjectOutputStream.
     Voici un exemple :
     class EncoreAutreClasse {
     public EncoreAutreClasse() { // constructeur de la classe
     EncoreAutreClasse
     try {
     // lit le fichier
     FileInputStream fis = new FileInputStream("monFichier.dat");
     // ce fichier stocke des objets
     ObjectInputStream ois = new ObjectInputStream(fis);
www.9ra.info              Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
                                               http://www.pdfmail.com




         // lire un objet et le convertir en MaClasse
         MaClasse mc2 = (MaClasse)ois.readObject() ;
         ois.close() ; //fermer le flux
         // ObjectInputStream susceptible de générer des
         exceptions
         } catch(IOException err) { }
         }
         Vous pouvez sérialiser plusieurs objets dans un même fichier en
         ayant recours plusieurs fois à la méthode writeObject() ou en
         utilisant les autres méthodes de ObjectOutputStream. Dans ce
         cas, vous devez appeler plusieurs fois les méthodes de
         ObjectInputStream. La règle est la suivante : le premier objet
         sérialisé est le premier fichier désérialisé, le second écrit est le
         second lu, etc….

				
DOCUMENT INFO
Categories:
Tags:
Stats:
views:3
posted:1/21/2012
language:French
pages:52