LES FICHIERS. 1-169169 JAVA Christine BONNET



Documents pareils
Flux de données Lecture/Ecriture Fichiers

Chapitre 10. Les interfaces Comparable et Comparator 1

Package Java.util Classe générique

Développement Logiciel

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Chapitre V. Les classes : Object, Vector, etc.

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Programmation Par Objets

Programmer en JAVA. par Tama

TD/TP PAC - Programmation n 3

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Auto-évaluation Programmation en Java

Une introduction à Java

Langage Java. Classe de première SI

Plan du cours. Historique du langage Nouveautés de Java 7

PROGRAMMATION PAR OBJETS

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

4. Groupement d objets

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

TD/TP PAC - Programmation n 3

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Remote Method Invocation Les classes implémentant Serializable

Calcul Parallèle. Cours 5 - JAVA RMI

Cours 14 Les fichiers

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Java 1.5 : principales nouveautés

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

as Architecture des Systèmes d Information

Remote Method Invocation (RMI)

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Gestion distribuée (par sockets) de banque en Java

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Utilisation d objets : String et ArrayList

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Projet de programmation (IK3) : TP n 1 Correction

Programmation par les Objets en Java

Généralités sur le Langage Java et éléments syntaxiques.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Cours 1: Java et les objets

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

1 Définition d une classe en Java

TD3: tableaux avancées, première classe et chaînes

Héritage presque multiple en Java (1/2)

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Java Licence Professionnelle CISII,

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

INITIATION AU LANGAGE JAVA

Programmation Objet 2

Introduction au langage de programmation Java

RMI le langage Java XII-1 JMF

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Langage à objets : JAVA (1)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation Orientée Objet Java

TP1 : Initiation à Java et Eclipse

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programmation Objet I

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Objets et Programmation. origine des langages orientés-objet

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Introduction au langage Java

Programme Compte bancaire (code)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Programmation par composants (1/3) Programmation par composants (2/3)

Threads. Threads. USTL routier 1

Introduction aux composants logiciels : JavaBeans Master des Technologies de l'internet

Corrigé des exercices sur les références

Programmation avec des objets : Cours 7. Menu du jour

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

TP, première séquence d exercices.

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

Introduction : les processus. Introduction : les threads. Plan

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Synchro et Threads Java TM

Java Licence Professionnelle CISII,

Classe Interne, Anonyme & Enumération

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Projet gestion d'objets dupliqués

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Tutoriel d installation de Hibernate avec Eclipse

1. Langage de programmation Java

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Support de cours et TD Programmation Orientée Objet

Application web de gestion de comptes en banques

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Applet pour visualiser les variables «automate» notifiées

INF 321 : mémento de la syntaxe de Java

Corrigés des premiers exercices sur les classes

Transcription:

12 LES FICHIERS 1-169169 JAVA Christine BONNET

LES FLOTS Package java.io La gestion des E/S s'effectue à l'aide des flots. Un stream (flot) représente un canal de communication ( écran, fichier, pipe, ). Un flot peut être représenté comme un buffer et des mécanismes associés pour réaliser l'e/s. Lecture ou écriture d'octets ou de caractères (Unicode : caractères à deux octets). 1-170170 JAVA Christine BONNET

LES CLASSES DE BASE DU PACKAGE java.io Flux orientés octets (ex. fichiers binaires) InputStream : lecture OutputStream : écriture Flux orientés caractères (ex. fichiers texte) Reader Writer Ces classes abstraites ne sont pas utilisées directement mais par de biais de classes dérivées. Autres classes de base File : nommage d'un fichier, informations RandomAccessFile : accès aléatoires sur un fichier. 1-171171 JAVA Christine BONNET

La classe File import java.io.file; class FileExample { public static void main(string args[]) { File file1 = new File("file.txt"); // déclaration d'un fichier System.out.println("Le fichier : " + file1.getname() + (file1.isfile()? " est un fichier" : " est un canal nomme ou un repertoire")); System.out.println("Taille : " + file1.length()); System.out.println("Chemin : " + file1.getpath()); System.out.println("Chemin absolu : " + file1.getabsolutepath()); System.out.println("Date de derniere modification : " + file1.lastmodified()); System.out.println(file1.exists()? "Le fichier existe " : "Le fichier n'existe pas "); System.out.println(file1.canRead()? "Le fichier peut etre lu" : "Le fichier ne peut pas être lu"); System.out.println(file1.canWrite()? "L'ecriture est autorisee" : "L'ecriture n'est pas autorisee"); System.out.println(file1.isDirectory()? "Le fichier est un repertoire " : "Le fichier n'est pas un repertoire"); 1-172172 JAVA Christine BONNET

Le fichier : file.txt est un fichier Taille : 24 Chemin : file.txt Chemin absolu : C:\JAVA\file.txt Date de derniere modification : 1069843750000 Le fichier existe Le fichier peut etre lu L'ecriture n'est pas autorisee Le fichier n'est pas un repertoire Appuyez sur une touche pour continuer... 1-173173 JAVA Christine BONNET

SÉRIALISATION DÉ-SÉRIALISATION Processus permettant : de sauvegarder des objets (dans un fichier) ou de restaurer des objets (à partir d'un fichier) Les objets sérialisés doivent implémenter l'interface Serializable (cette interface ne possède ni attributs, ni constructeurs, ni méthodes, elle indique simplement qu'un objet est sérialisable) Utilisation des classes ObjectOutputStream (sérialisation) et ObjectInputStream (dé-sérialisation) (classes dérivées de OutputStream et InputStream) 1-174174 JAVA Christine BONNET

LA SÉRIALISATION Le stockage permanent des objets peut être accompli en utilisant un fichier comme OutputStream La classe java.io.fileoutputstream permet de définir un flux en sortie pour écrire des données dans un fichier. (FileOutputStream dérive de la classe OutputStream) String nomfic = "FCOMPTE"; // nom du fichier File f1 = new File(nomFic); // déclaration d'un fichier // définition d'un flot de sortie FileOutputStream fo = new FileOutputStream(f1); La classe java.io.objectoutputstream permet d'écrire des données de type primitif (boolean, byte, char, int, etc.) et des objets dans un OutputStream. ObjectOutputStream foobj = new ObjectOutputStream(fo); 1-175175 JAVA Christine BONNET

LA SÉRIALISATION Écriture d'un objet donné sur le flux ObjectOutputStream Méthode void writeobject(object obj) foobj.writeobject(tabcompte) ; // écriture d'un tableau d'objets Fermeture du flux la classe de l'objet doit être public la classe de l'objet doit implémenter l'interface Serializable cette méthode appelle la méthode writeobject de chaque objet composite - si leur classe implémente l'interface Serializable - et jusqu'à ce que tout ce qui compose l'objet soit écrit. Méthode void close() foobj.close(); 1-176176 JAVA Christine BONNET

LA DÉ-SÉRIALISATION La classe java.io.fileinputstream permet de définir un flux en entrée pour lire des données à partir d'un fichier. (FileInputStream dérive de la classe InputStream) // définition d'un flot en lecture FileInputStream fi = new FileInputStream(f1); La classe java.io.objectinputstream permet de lire des données de type primitif (boolean, byte, char, int, etc.) et des objets à partir d'un InputStream. ObjectInputStream fiobj = new ObjectInputStream(fi); 1-177177 JAVA Christine BONNET

LA DÉ-SÉRIALISATION Lecture d'un objet dans un flux ObjectInputStream Méthode Object readobject() Cette méthode renvoie une référence sur Object transtypage obligatoire Compte table[] = (Compte []) fiobj.readobject(); Si la classe d'appartenance de l'objet est inconnue utilisation des méthodes de la classe Class : getname() et getclass() monobjet.getclass().getname() 1-178178 JAVA Christine BONNET

COMPLÉMENTS Lorsqu'un attribut d'une classe ne doit pas être sérialisé, le déclarer transient. Un attribut static n'est pas sérialisé. Les sous-classes d'une classe Serializable le sont. Pour qu'une classe effectue un traitement durant la sérialisation/dé-sérialisation elle doit implémenter les méthodes : private Object readobject(objectinputstream stream) throws IOException, ClassNotFoundException; private void writeobject(objectoutputstream stream) throws IOException; 1-179179 JAVA Christine BONNET

EXEMPLE import java.io.*; public class TestSerialisation { public static void main(string args[]) { Compte[] tabcompte = new Compte[3]; tabcompte[0] = new Compte("Bern", 3500); tabcompte[1] = new Compte("Ardisson", 1000); tabcompte[2] = new Compte("Gerra", 7500); try { // Sérialisation // Ouverture d'un fichier String nomfic = "FCOMPTE"; // nom du fichier File f1 = new File(nomFic); // déclaration du fichier // Définition d'un flux de sortie FileOutputStream fo = new FileOutputStream(f1); ObjectOutputStream foobj = new ObjectOutputStream(fo); // Ecriture du tableau dans le fichier foobj.writeobject(tabcompte); // Fermeture du flux foobj.close(); 1-180180 JAVA Christine BONNET

System.out.println("\n Lecture du fichier\n"); // Définition d'un flux d'entrée FileInputStream fi = new FileInputStream(f1); ObjectInputStream fiobj = new ObjectInputStream(fi); // Lecture et récupération dans un tableau Compte table[] = (Compte[])fiObj.readObject(); // Affichage des résultats for (int i = 0; i < table.length; i++) System.out.println(table[i]); // Fermeture du flux fiobj.close(); // fin du try catch (Exception e) { e.printstacktrace(); System.out.println("\n"+ e.getmessage()+"\n"); // fin main // fin de TestSerialisation 1-181181 JAVA Christine BONNET

// Extrait de la classe Compte import java.io.*; public class Compte implements Serializable { // variable de classe private static int derniernum = 0; // attributs de la classe private int numcompte; private String nompers; private float soldecompte; // Constructeur Compte(String nom, float solde) { numcompte = ++derniernum; nompers = new String(nom); soldecompte = solde; // Méthodes public String tostring() { return "\n Compte numero : " + numcompte+" \n Client : " +nompers + "\n Solde : " +soldecompte +"\n"; // // fin de la classe Compte 1-182182 JAVA Christine BONNET

13 LES CLASSES UTILITAIRES 1-183183 JAVA Christine BONNET

Package java.util Le package java.util contient des interfaces et des classes, spécialisées dans la gestion des structures de données et utilitaires. Interfaces : Collection, List, Set, SortedSet Iterator (parcours d'une collection), Comparable (comparaison d'objets) Classes : Vector, Stack, Array Random, Date 1-184184 JAVA Christine BONNET

COMPLÉMENTS SUR LA CLASSE VECTOR Conteneur d'objets de type tableau (collection d'objets de type quelconque) Permet d'implémenter un tableau dynamique Chaque vecteur possède une capacité (taille maximale). Si cette taille est dépassée, la capacité est augmentée automatiquement. Les objets stockés peuvent provenir de classes différentes. Accès aux éléments du vecteur : par un index ou un itérateur. La classe Vector implémente l'interface List il est possible de l'utiliser comme une liste. 1-185185 JAVA Christine BONNET

Vector() //crée un vecteur vide Vector(int capacitéinitiale) // // crée un vecteur vide de capacité initialcapacité Vector(int capacitéinitiale, int incrémentecap ) Constructeurs de la classe Vector // // crée un vecteur vide de facteur d'accroissement spécifié Quelques méthodes de la classe Vector Insertion d'un élément boolean add(object o) // // ajoute l'élément à la fin du vecteur void add(int Index, Object element) // // insère l'élément donné en position donnée 1-186186 JAVA Christine BONNET

Quelques méthodes de la classe Vector (suite) Recherche - information Object get(int index) // // renvoie l'élément situé à la position indiquée int indexof(object element) // // recherche la première occurrence d'un élément- surcharge // // nécessaire de la méthode equals / critère de recherche int size() // // renvoie le nombre de composants du vecteur Suppression - Modification Object remove(int index) // // supprime l'élément situé à la position indiquée boolean remove(object o) // // supprime la première occurrence de l'élément donné void clear() // // supprime tous les éléments du vecteur 1-187187 JAVA Christine BONNET

Quelques méthodes de la classe Vector (suite) Conversion d'un vecteur en un tableau Object[] toarray() Object[] toarray(object[]tab) Tri du conteneur 1. Spécifier que la classe des objets du conteneur implémente l'interface Comparable 2. Implémenter la méthode compareto dans cette classe 3. Invoquer la méthode sort de la classe Collections Vector conteneur = new Vector(20,5);. Collections.sort(conteneur); 1-188188 JAVA Christine BONNET

// Extrait de la classe Personnel //import java.util.*; public class Personnel implements Comparable { // variable de classe private static int derniernum = 0; // attributs de la classe private int numpers; private String nompers; private String numtel; // Constructeur Personnel(String nom, String nutel) { numpers = ++derniernum; nompers = new String(nom); numtel = new String(nuTel); 1-189189 JAVA Christine BONNET

// Méthodes // Implémentation de compareto de l'interface Compare // pour pouvoir trier public int compareto(object p) { return numtel.compareto(((personnel)p).numtel); public void affiche() { System.out.println(" Numero de Personne : "+numpers); System.out.println(" Nom : "+nompers); System.out.println(" Numero de telephone : "+numtel+"\n"); // pour l'utilisation de indexof public boolean equals(personnel p) { return numpers==p.numpers; // // fin de la classe Personnel 1-190190 JAVA Christine BONNET

import java.util.*; public class TestVecteur { public static void main(string args[]) { // Définition d'un objet de la classe Vector de 20 éléments // dont la capacité augmente de 5 en cas de débordement Vector conteneur = new Vector(20,5); // Ajout d'objets de la classe Personnel conteneur.add(new Personnel("Garou","0144436578")); conteneur.add(new Personnel("Mc Solaar","0123143676")); conteneur.add(new Personnel("Baffie","0365437689")); conteneur.add(new Personnel("Kidman","0187654356")); // insertion au rang 1 Personnel temp = new Personnel("Clooney","0132654387"); conteneur.add(0,temp); // Affichage du contenu du vecteur System.out.println("\n Caracteristiques (vecteur) : "); for (int i = 0; i < conteneur.size(); i++) { ((Personnel)conteneur.get(i)).affiche(); 1-191191 JAVA Christine BONNET

// Définition d'un itérateur Iterator it = conteneur.iterator(); // Affichage du contenu du vecteur par l'itérateur System.out.println("\n Caracteristiques (iterateur) : "); while (it.hasnext()) { ((Personnel)it.next()).affiche(); // Conversion du vecteur en un tableau de Personnel Personnel tabsalarie[]= new Personnel[conteneur.size()]; tabsalarie = (Personnel[])conteneur.toArray(tabSalarie); // Affichage du contenu du tableau System.out.println("\n Caracteristiques (tableau : "); for (int i = 0; i < tabsalarie.length; i++) { tabsalarie[i].affiche(); // Suppression de la référence sur le deuxième élément conteneur.remove(1); // Suppression en gardant une référence sur l'objet supprimé Personnel recup = (Personnel)conteneur.remove(1); System.out.println("\n Caracteristiques (recup) : "); recup.affiche(); 1-192192 JAVA Christine BONNET

// Recherche de l'occurrence d'un élément // Surcharge de equals dans Personnel // Utilisation de indexof int j = conteneur.indexof(temp); System.out.println("\n Le salarie est a la position : "+j); // tri du conteneur // Dans la classe Personnel, méthode compareto() Collections.sort(conteneur); // Affichage du contenu du vecteur System.out.println("\n Caracteristiques (trie) : "); for (int i = 0; i < conteneur.size(); i++) { ((Personnel)conteneur.get(i)).affiche(); // Vider totalement le conteneur conteneur.clear(); // fin main // fin classe TestVecteur 1-193193 JAVA Christine BONNET