Exercice09_EntreeSortieRetourTélécharger EnonceExercice09.pdf README.txt Pour compiler : javac *.java Avant d'executer il faut creer le repertoire "text" et y créer un fichier quelconque de texte. Pour executer l'exercice 1: java Exercice09_1 Pour executer l'exercice 2: java Exercice09_2 Pour executer l'exercice 3: java Exercice09_3 Exercice09_1.java import java.io.*; public class Exercice09_1 { // Si il y a une erreur d'IO non prévue dans le main // on retourne l'erreur (le programme s'arrête et affichera // l'exception // public static void main(String[] args) throws IOException { // Recuperation de l'entrée du clavier BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in)); /// Lecture du nom du fichier System.out.println("Le nom du fichier texte : "); String nomFichierEntree = clavier.readLine(); File fichIn = new File("text",nomFichierEntree); if (! fichIn.exists()) { System.out.println("Le fichier d'entree n'existe pas"); System.exit(0); } BufferedReader flotIn = new BufferedReader(new InputStreamReader(new FileInputStream(fichIn))); // Création du répertoire "binaire" File rep = new File("binaire"); rep.mkdir(); // Si le repertoire existe déjà cette méthode ne fait rien // Déclaration du fichier de sortie // String nomFichierSortie = "binaire"+File.separator+ nomFichierEntree+".binaire"; File fichOut = new File(nomFichierSortie); DataOutputStream flotOut = new DataOutputStream(new FileOutputStream(fichOut)); // On va lire le fichier texte ligne à ligne et // nous allons écrire la ligne dans un fichier binaire // try{ String str = flotIn.readLine(); while (str!=null) { System.out.println("trace: "+str); flotOut.writeUTF(str); str = flotIn.readLine(); // Attention on écrit pas le "\n" qui a été absorbé // par le readLine. } flotOut.close(); System.out.println("Fichier cree : "+nomFichierSortie); } catch(IOException ex) { // Si erreur d'écriture alors on trace l'erreur System.out.println(ex); ex.printStackTrace(); } } } Exercice09_2.java import java.io.*; public class Exercice09_2 { // Si il y a une erreur d'IO non prévue dans le main // on retourne l'erreur (le programme s'arrête et affichera // l'exception // public static void main(String[] args) throws IOException { // Recuperation de l'entrée du clavier BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in)); /// Lecture du nom du fichier System.out.println("Le nom du fichier binaire : "); String nomFichierEntree = clavier.readLine(); File fichIn = new File("binaire",nomFichierEntree); if (! fichIn.exists()) { System.out.println("Le fichier d'entree n'existe pas"); System.exit(0); } DataInputStream flotIn = new DataInputStream(new FileInputStream(fichIn)); // On va lire le fichier binaire. Il faut le lire comme il a été // écrit : une chaine UTF par ligne. // On ne connait pas à priori le nombe de ligne, on va donc // lire chaque ligne jusqu'a rencontrer une exception. // StringBuffer strBuf = new StringBuffer(); try{ while (true) { String str = flotIn.readUTF(); strBuf.append(str); strBuf.append("\n"); // On ajoute le retour à la ligne } } catch(IOException ex) { //Fin de lecture } // On écrit le StringBuffer System.out.println(strBuf); } } Exercice09_3.java import java.io.*; import java.util.*; public class Exercice09_3 { // Si il y a une erreur d'IO non prévue dans le main // on retourne l'erreur (le programme s'arrête et affichera // l'exception // public static void main(String[] args) throws IOException { // Recuperation de l'entrée du clavier BufferedReader clavier = new BufferedReader(new InputStreamReader(System.in)); // Lecture du nom du fichier System.out.println("Le nom du fichier de livre : "); String nomFichierEntree = clavier.readLine(); File fichIn = new File(nomFichierEntree); if (! fichIn.exists()) { System.out.println("Le fichier d'entree n'existe pas"); System.exit(0); } // Le flot de lecture BufferedReader flotIn = new BufferedReader(new InputStreamReader(new FileInputStream(fichIn))); // Déclaration du ArrayList contennant les livres ArrayList<Livre> livres = new ArrayList<Livre>(); // On va lire le fichier texte. // // Lecture du nombre de livre String str = flotIn.readLine(); int nbLivre=0; try{ nbLivre = Integer.parseInt(str); }catch(Exception ex) { System.out.println("Pb de lecture du nbre de livre a la ligne 1 :["+str+"]"); System.exit(0); } // Lecture de chaque livre int ligne=2; for(int i=0;i<nbLivre;i++) try{ // Création d'un livre vide Livre l = new Livre(); // Lecture des 3 lignes // Ajout des informations lues dans le livre // C'est la classe Livre qui décode la ligne lue // On passe en parametre le numero de ligne car // si il y a un pb de decodage la méthode setInfo // pourra indiquer l'erreur. // String str1 = flotIn.readLine(); l.setInfo(str1,ligne); ligne++; String str2 = flotIn.readLine(); l.setInfo(str2,ligne); ligne++; String str3 = flotIn.readLine(); l.setInfo(str3,ligne); ligne++; // Ajout du livre dans la liste livres.add(l); }catch(IOException ex) { System.out.println("Erreur dans la lecture d'un livre."); System.out.println("Erreur à la ligne "+ ligne); } // On affiche les livres System.out.println("===================================="); for(Livre l:livres) System.out.println(l+"\n-------------------"); } } // La classe Livre class Livre { String titre; // Le titre du livre String description; // La description du livre ArrayList<String> auteurs; // Les auteurs du livre // Constructeur public Livre() { // La liste est cree vide auteurs = new ArrayList<String>(); } // Methode qui initialise l'attribut du livre en fonction de // la ligne du fichier // On passe le numero de la ligne en parametre en cas d'erreur // public void setInfo(String info,int ligne) { try{ // Les champs de la ligne sont séparés par ":" StringTokenizer strTok = new StringTokenizer(info,":"); String typeInfo = strTok.nextToken().trim(); // La methode trim permet d'enlever les blancs superflus if (typeInfo.equals("TITRE")) { this.titre = strTok.nextToken().trim(); } else if (typeInfo.equals("DESCRIPTION")) { this.description = strTok.nextToken().trim(); } else if (typeInfo.equals("AUTEURS")) { while(strTok.hasMoreTokens()) { this.auteurs.add(strTok.nextToken().trim()); } } else { // Erreur qui sera traitée dans le bloc d'exception throw new Exception("Type info inconnue: ["+typeInfo+"]"); } }catch(Exception ex) { System.out.println(ex); System.out.println("Erreur de format à la ligne: ["+ligne+"]"); System.out.println(info); } } // Le livre en chaine public String toString() { // On concatene les auteurs String auteursStr=""; for(String a:this.auteurs) auteursStr=auteursStr+a+" "; return this.titre + "\n" + this.description + "\n" + auteursStr; } }