Télécharger le polycopié + tp

Documentation:

Cours général: http://www.developpez.com/upload/vedaer/penserenjavaNew/

Fichiers: http://www.developpez.com/upload/vedaer/penserenjavaNew/?chap=12&page=2

Sérialisation: http://www.developpez.com/upload/vedaer/penserenjavaNew/?chap=12&page=4#04.036

Sérialisation: http://perso.wanadoo.fr/jm.doudoux/java/tutorial/chap020.htm

StringTokenizer: http://www.developpez.org/club/bkostrzewa/td-chaines/tokenize.html

Gestion des dates: http://java.developpez.com/faq/java/?page=langage_date

Code source de l'exemple:

à venir
//**************  PersonneWriter.java

package ecrisfichier;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;


public class PersonneWriter {

  
  /*
   * Sauver et relire un objet
   */
  
  public static void testAnnuaire() {
    Annuaire a = new Annuaire();
    a.ajoutePersonne(new Personne(stringToDate("05/06/2006")"Dupont",
        "Jean"));
    a.ajoutePersonne(new Personne(stringToDate("01/02/1935")"Durant",
        "Alfred"));
    a.ajoutePersonne(new Personne(stringToDate("01/01/1995")"Dujnou",
        "Paul"));
    try {
      FileOutputStream fichier = new FileOutputStream("annuaire.dat");
      ObjectOutputStream out = new ObjectOutputStream(fichier);
      out.writeObject(a);
      out.close();
      System.out.println("annuaire sauvegardé dans le fichier:\n" + a);
    catch (FileNotFoundException e) {
      System.out.println("erreur d'ouverture du fichier en écriture");
    catch (IOException e) {
      System.out.println("erreur d'écriture du fichier");
    }

    
    // relecture de l'annuaire sauvegardé

    try {
      FileInputStream fichierEnLecture = new FileInputStream("annuaire.dat");
      ObjectInputStream in = new ObjectInputStream(fichierEnLecture);
      Annuaire b = (Annuairein.readObject();
      System.out.println("annuaire relu à partir du fichier:\n" + b);
    catch (FileNotFoundException e) {
      System.out.println("erreur d'ouverture du fichier en lecture");
    catch (IOException e) {
      System.out.println("erreur de lecture du fichier");
    catch (ClassNotFoundException e) {
      System.out.println("erreur de type " + e.getMessage());
    }
    

  }  
  
  /*
   * Sauver et relire un objet au format csv reconnu par Excel
   */
  
  public static void testAnnuaireCsv() {
    Annuaire a = new Annuaire();
    a.ajoutePersonne(new Personne(stringToDate("05/13/2006")"Dupont",
        "Jean"));
    a.ajoutePersonne(new Personne(stringToDate("01/02/1935")"Durant",
        "Alfred"));
    a.ajoutePersonne(new Personne(stringToDate("01/01/1995")"Dujnou",
        "Paul"));
    try {
      FileOutputStream fichier = new FileOutputStream("annuaire1.csv");
      PrintWriter out = new PrintWriter(fichier);
      out.print(a.toCsv());
      out.close();
      System.out
          .println("annuaire sauvegardé au format csv dans le fichier annuaire1.csv:\n"
              + a);
    catch (FileNotFoundException e) {
      System.out.println("erreur d'ouverture du fichier en écriture");
    }
    // ouvrir l'annuaire sauvegardé avec Excel, le modifier,
    // et le sauvegarder sous le nom: annuaire3.csv

    // relecture de l'annuaire sauvegardé
    Annuaire b = new Annuaire();
    try {
      FileReader fichierEnLecture = new FileReader("annuaire3.csv");
      BufferedReader in = new BufferedReader(fichierEnLecture);
      String ligne;
      while ((ligne = in.readLine()) != null
        b.ajoutePersonne(new Personne(ligne));
      System.out
          .println("annuaire relu à partir du fichier annuaire3.csv:\n"
              + b);
    catch (FileNotFoundException e) {
      System.out.println("erreur d'ouverture du fichier en lecture");
    catch (IOException e) {
      System.out.println("erreur de lecture du fichier");
    }
  }

  
  /*
   * Sauver et relire un objet
   */  
  public static void testPersonne() {

    Personne p1 = new Personne(stringToDate("05/06/2006")"Dupont""Jean");

    // sauvegarde de l'objet
    try {
      FileOutputStream fichier = new FileOutputStream("person.don");
      ObjectOutputStream out = new ObjectOutputStream(fichier);
      out.writeObject(p1);
      out.close();
      System.out.println("objet sauvegardé dans le fichier:" + p1);
    catch (FileNotFoundException e) {
      System.out.println("erreur d'ouverture du fichier en écriture");
    catch (IOException e) {
      System.out.println("erreur d'écriture du fichier");
    }

    // relecture de l'objet sauvegardé

    try {
      FileInputStream fichierEnLecture = new FileInputStream("person.don");
      ObjectInputStream in = new ObjectInputStream(fichierEnLecture);
      Personne p2 = (Personnein.readObject();
      System.out.println("objet relu à partir du fichier:" + p2);
    catch (FileNotFoundException e) {
      System.out.println("erreur d'ouverture du fichier en lecture");
    catch (IOException e) {
      System.out.println("erreur de lecture du fichier");
    catch (ClassNotFoundException e) {
      System.out.println("erreur de type " + e.getMessage());
    }

  }

  public static void main(String[] args) {
      testAnnuaire();
      testAnnuaireCsv();
      testPersonne();
  }
  
  // usage: Date d = stringToDate("05/06/2006");
  public static Date stringToDate(String date) {
    Date d = null;
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    try {
      return df.parse(date);
    catch (ParseException e1) {
      System.out.print("erreur de conversion de date pour " + date);
      return null;
    }
  }  

}


//*************  Personne.java

package ecrisfichier;

import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;

public class Personne implements Serializable {

  private String nom;
  private String prenom;
  private Date dateNaissance;
  
  public String toString() {
    return nom + " " + prenom + " " + dateToString(dateNaissance);
  }

  public String toCsv() { // on peut l'ouvrir avec Excel
    return nom + ";" + prenom + ";" + dateToString(dateNaissance);
  }

  
  //csvLine est au format: Dupont;Jean;05/06/2006
  public Personne(String csvLine) {
      int compteurmot = 0;
      StringTokenizer s = new StringTokenizer(csvLine, ";");
      while (s.hasMoreTokens()) {
        switch (compteurmot) {
        case 0:
          nom = s.nextToken();
          break;
        case 1:
          prenom = s.nextToken();
          break;
        case 2:
          dateNaissance = stringToDate(s.nextToken());
          break;
        }
        compteurmot++;
      }
  }

  public Personne(Date naissance, String nom, String prenom) {
    dateNaissance = naissance;
    this.nom = nom;
    this.prenom = prenom;
  }
  
  public String dateToString(Date date) {
    Date d = null;
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    return df.format(date);
  }

  // usage: Date d = stringToDate("05/06/2006");
  public Date stringToDate(String date) {
    Date d = null;
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    try {
      return df.parse(date);
    catch (ParseException e1) {
      System.out.print("erreur de conversion de date pour " + date);
      return null;
    }
  }    

}


//***************   Annuaire.java

package ecrisfichier;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Annuaire implements Serializable {

  List personnes = new ArrayList();

  public void ajoutePersonne(Personne p) {
    personnes.add(p);
  }

  public String toString() {
    String result = "";
    Iterator iter = personnes.iterator();
    while (iter.hasNext()) {
      Personne element = (Personneiter.next();
      result += element + "\n";
    }
    return result;
  }

  public String toCsv() { // on peut l'ouvrir avec Excel
    String result = "";
    Iterator iter = personnes.iterator();
    while (iter.hasNext()) {
      Personne element = (Personneiter.next();
      result += element.toCsv() "\n";
    }
    return result;
  }

}
-->