JAVA Les Entrées-sorties

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

Introduction Fonctionnement PluginsConfigurationLes données Le framework MAG Framework de conception de canaux complexes Implémente IChannel Possède son.
Sérialisation des objets
Le mécanisme des exceptions
Flots et Sérialisation des objets
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Java et la réflexivité. Java reflection is useful because it supports dynamic retrieval of information about classes and data structures by name, and.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
L’ interruption de boucle
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Dernière scéance: Des question?????? + Deux exercices.
JAV - TD 6 Structures de données JAVA
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
Stéphane Frenot - Département Télécommunication - SID - II - Jdbc 280 JDBC Java Databases Connectivity.
PHP mySQL Extension php_mysql. Connexion à une base de données Établir une connexion mysql_connect(string server, string username, string password) –permet.
1 Le mécanisme des exceptions Qu'est-ce qu'une exception? Comment définir et signaler des exceptions? Comment récupérer des exceptions?
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
COURS DE PROGRAMMATION ORIENTEE OBJET :
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
JDBC ou comment manipuler une base de données en Java ?
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Système d’Exploitation
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
14 La gestion d’événements
Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 10 Accès distant aux bases de données.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Entrées / Sorties.
Les sockets.
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
1 Chapitre III (~70 transparents) Compléments. 2 Au sommaire de ce chapitre 1. Les fichiers Les classes utilitaires
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
6ième Classe (Mercredi, 17 novembre) CSI2572
Fichier et Stream d’Entrée-Sortie IFT1025, Programmation 2 Jian-Yun Nie Version court par Douglas Eck; Version
Chapitre VII Techniques plus avancées à travers le concept de classe.
Introduction à la programmation objet avec java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 2 – Java Premiers pas Master 1 SIGLIS1 Java Lecteur - Chapitre 2 - Java Premiers Pas.
JDBC - p. 1 JDBC. JDBC - p. 2 Objectifs Fournir un accès homogène aux SGBDR Abstraction des SGBDR cibles Requêtes SQL Simple à mettre en oeuvre Core API.
Interface Java – Oracle : JDBC. I-2 JDBC (Java DataBase Connectivity) : interface API (Application Programming Interface) qui permet d’exécuter des ordres.
JDBC Présenter par: Mouctar Souleymane Bah Enseignent: Dr Amer Draâ
JDBC (Complément de cours) IFT 3030
Bases de données Singleton pour la connexion
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Master Réseaux et Systèmes Distribués (RSD) Algorithmique des systèmes
STREAMS (et fichiers).
Lecture/Écriture de fichiers (I/O)
TP N°5: Partie I Programme Serveur.
Transcription de la présentation:

JAVA Les Entrées-sorties

Entrées-sorties en Java java.io 3 hiérarchies de classes Input : sous-classes de InputStream : read() Output : sous-classes de OutputStream : write() RandomAccessFile on les combine pour obtenir des fonctions différences entre Java 1.0 et 1.1 java.lang.System public static InputStream in public static PrintStream out public static PrintStream err

java.io 1.0

Lecture au clavier : InputStream import java.io.*; public class Echo { public static void main(String[] args) { String s ; byte tab[] = new byte[128]; try { System.in.read(tab); // InputStream lit seulement des octets s = new String(tab, 0); // Conversion en String System.out.println(s); } catch(IOException e) { // Obligatoire pour compiler e.printStackTrace(); D:\Java\Programmes\EchoV0>java Echo essai de inputStream D:\Java\Programmes\EchoV0>

La classe InputStream

Lecture au clavier avec DataInputStream import java.io.*; public class Echo { public static void main (String argv[]) { DataInputStream in = new DataInputStream (System.in); String s ; try { s = in.readLine(); // Lecture d’une ligne System.out.println(s); // Affichage de la ligne lue } catch (IOException e) { e.printStackTrace (); D:\Java\Programmes\EchoV1>java Echo essai de DataInputStream D:\Java\Programmes\EchoV1>

Lecture au clavier Lecture au clavier de plusieurs lignes while (( s=in.readLine()).length () != 0 ) System.out.println(s); Faire moins d’accès : passer par un Buffer DataInputStream in = new DataInputStream ( new BufferedInputStream(System.in));

Ecriture formatée dans un fichier import java.io.*; public class Sortie { public static void main (String argv[]) { try { DataOutputStream out = new DataOutputStream ( new BufferedOutputStream( new FileOutputStream ("Data.txt"))); out.writeBytes ("Essai de DataOutputStream\n"); out.writeDouble (3.14159); out.close(); } catch (IOException e) { e.printStackTrace (); => le fichier binaire Essai.dat est crée (non lisible)

La classe FileOutputStream

Lecture formatée dans un fichier import java.io.*; public class Entree { public static void main (String argv[]) { try { DataInputStream in = new DataInputStream ( new BufferedInputStream( new FileInputStream ("Essai.dat"))); System.out.println (in.readLine()); System.out.println (in.readDouble()); } catch (IOException e) { e.printStackTrace ();

La classe FileInputStream

La classe File noms de fichiers informations créer des dossiers renommer des fichiers

Tester l’existence d’un fichier import java.io.*; public class TestFile { public static void main (String argv[]) { File f = new File ("Infos.txt"); if (f.exists()) System.out.println ("Le fichier Infos.txt existe"); else System.out.println ("Le fichier Infos.txt n'existe pas"); }

Informations sur les fichiers import java.io.*; public class InfosFile { public static void main (String argv[]) { File f = new File ("Infos.txt"); if (f.exists()) { System.out.println ("Informations sur le fichier Infos.txt"); System.out.println ("isFile : " + f.isFile()); System.out.println ("isDirectory : " + f.isDirectory()); System.out.println ("getAbsolutePath : " + f.getAbsolutePath()); System.out.println ("length : " + f.length()); System.out.println ("canRead : " + f.canRead()); System.out.println ("canWrite : " + f.canWrite()); }

Informations sur les fichiers D:\Martin\Java\Programmes\TestFile>java InfosFile Informations sur le fichier Infos.txt isFile : true isDirectory : false getAbsolutePath : D:\Java\Programmes\TestFile\Infos.txt length : 14 canRead : true canWrite : true

La classe AWT.FileDialog import java.io.*; import java.awt.* ; public class TesterFileDialog { public static void main (String argv[]) { Frame maFenetre = new Frame ("Fenêtre indépendante"); maFenetre.setSize(200, 200); maFenetre.show(); FileDialog f = new FileDialog(maFenetre, "Ouvrir un fichier", FileDialog.LOAD); f.show(); String Nom = f.getFile(); String Dir = f.getDirectory(); System.out.println ("Dossier: " + Dir ); System.out.println ("Nom: " + Nom); } D:\Java\Programmes\FileDialog>java TesterFileDialog Dossier: D:\Java\Programmes\FileDialog\ Nom: TesterFileDialog.java

Exécution FileDialog D:\Java\Programmes\FileDialog>java TesterFileDialog Dossier: D:\Java\Programmes\FileDialog\ Nom: TesterFileDialog.java

La classe RandomAccessFile import java.io.*; public class Raf { public static void main (String argv[]) { try { // Ecriture avec accès séquentiel RandomAccessFile f = new RandomAccessFile ("chiffres.dat", "rw"); for (int i = 0; i < 10 ; i ++ ) f.writeInt (i); f.close (); // Ecriture avec accès direct RandomAccessFile f2 = new RandomAccessFile ("chiffres.dat","rw"); f2.seek (5*4); f2.writeInt (0); f2.close (); ...

La classe RandomAccessFile ... // Lecture avec accès séquentiel RandomAccessFile f3 = new RandomAccessFile ("chiffres.dat", "r"); for (int i = 0; i < 10 ; i ++ ) System.out.println ("Valeur " + i + " : " + f3.readInt()); f3.close (); } catch (IOException e) { e.printStackTrace (); EXECUTION : Valeur 0 : 0 Valeur 1 : 1 Valeur 2 : 2 Valeur 3 : 3 Valeur 4 : 4 Valeur 5 : 0 Valeur 6 : 6 Valeur 7 : 7 Valeur 8 : 8 Valeur 9 : 9

La classe RandomAccessFile

La classe RandomAccessFile

La classe StreamTokenizer Découper un InputStream en token On peut définir des séparateurs blancs, ponctuations

La classe StringTokenizer Découpe une String en mots. Les séparateurs ne peuvent pas être définis tabulation, espace, newline

Java.io du JDK 1.1 Class Reader Writer : supportent l’Unicode Dans certains cas on est obligé d'utiliser 1.0 Compression : Zip et GZIP Redirection : System.setIn (InputStream) System.setOut (PrintStream) System.setErr (PrintStream) Sérialisation d'objets

Contenu de java.io version 1.1

Sérialisation d’objets Tout objet implémentant l'interface Serializable peut être transformé en une suite d'octets Ces octets peuvent être stockés ou transmis L’objet peut être reconstruit à partir de ces octets Nécéssaire pour RMI et JavaBeans

Sérialisation d’objets Ecriture : créer un OutputStream le wrapper dans un ObjectOutputStream appeler writeObject() Lecture : créer un InputStream le wrapper dans un ObjectInputStream appeler readObject() rend une référence sur un object : faire un cast Des classes prédéfinies sont sérialisables

Sérialisation d’objets : exemple import java.io.*; class Personne implements Serializable { String nom, prenom ; Personne (String nom, String prenom) { this.nom = nom ; this.prenom = prenom ; } public String toString() { return (nom + " ," + prenom); public static void main (String argv[]) { try { // Enregistrement ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream ("personnes.dat")); out.writeObject ("Sauvegarde d'une personne"); out.writeObject (new Personne ("Aubert", "Jean")); out.close(); ...

Sérialisation d’objets : exemple // Lecture ObjectInputStream in = new ObjectInputStream( new FileInputStream ("personnes.dat")); String s = (String) in.readObject (); System.out.println (s); Personne p = (Personne) in.readObject (); System.out.println (p); in.close(); } catch (Exception e) { e.printStackTrace (); D:\Martin\Java\Programmes\Serialisation>java Personne Sauvegarde d'une personne Aubert ,Jean D:\Martin\Java\Programmes\Serialisation>

Sérialisation La sérialisation considère aussi les références contenues dans l’objet et sérialise les objets correspondants Utile pour les tableaux, listes chaînées...

Sérialisation : exemple import java.io.*; class Compte implements Serializable { Personne client ; int numero ; double solde ; Compte (String nom, String prenom, int numero, double solde) { client=new Personne (nom, prenom); this.numero = numero ; this.solde = solde ; } public String toString() { return (" compte no " + numero + " - solde " + solde + " - client : " + client); public static void main (String argv[]) { try { // Enregistrement ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream ("comptes.dat")); out.writeObject ("Sauvegarde d'un compte"); out.writeObject (new Compte ("Aubert", "Jean", 78, 1598.50)); out.close(); ...

Sérialisation : exemple ... // Lecture ObjectInputStream in = new ObjectInputStream( new FileInputStream ("comptes.dat")); String s = (String) in.readObject (); System.out.println (s); Compte c = (Compte) in.readObject (); System.out.println (c); in.close(); } catch (Exception e) { e.printStackTrace (); EXECUTION : D:\Java\Programmes\Serialisation>java Compte Sauvegarde d'un compte compte no 78 - solde 1598.5 - client : Aubert ,Jean D:\Java\Programmes\Serialisation>

BASES DE DONNEES java.sql

1) Créer la base de données

2) Configurer la source de données dans le driver ODBC

3) Exécution : interrogation de la base de données

En Java : 4 étapes Charger un driver JDBC classe DriverManager Créer une connexion avec la base de données classe Connection Soumettre une requête SQL classe Statement Récupérer les résultats classe ResultSet

Programme Java (1) //------------------------------------------------------------------ // JDBC.java : exemple d'interrogation d'une base de données en Java // on indique les classes Java que l'on va utiliser import java.awt.event.*; // Evénements import java.awt.*; // Librairie graphique import java.sql.*; // Interrogation de bases de données class JDBCTest extends Frame { // la zone de texte dans laquelle s'affiche les résultats de la requête TextArea maZoneTexte; // le bouton qui sert à lancer la requête Button monBouton; // Command ID pour le bouton static final int cmdID = 1; //--------------------------------------------- // Méthode main appelée la première public static void main(String argv[]) { // Créer une instance de la classe JDBCTest (le constructeur sera appelé) JDBCTest monJDBCTest = new JDBCTest(); // Gérer la fermeture de la fenêtre monJDBCTest.addWindowListener(monJDBCTest. new WndAdapter()); }

Programme Java (2) //--------------------------------------------- // Méthode constructeur public JDBCTest() { // Création d'une fenêtre indépendante super("Java et Bases de données"); setLayout(new FlowLayout()); // Ajout de la zone de texte et du bouton maZoneTexte = new TextArea(25, 75); add(maZoneTexte); monBouton = new Button("Interrogation de la base de données Comptoir"); monBouton.addActionListener(new ButtonAdapter(cmdID)); add(monBouton); setSize(650, 500); setVisible(true); }

Programme Java (3) //--------------------------------------------- // Méthode d'affichage des résultats de la requête void affichageResultats(ResultSet results) throws SQLException { // Récupération d'information sur la structure des résultats ResultSetMetaData resultsMetaData = results.getMetaData (); // Récupération du nombre de colonnes des résultats int cols = resultsMetaData.getColumnCount(); // Boucle d'affichage des résultas while (results.next()) { // Affichage d'une ligne de résultat for (int i=1; i<=cols; i++) { // Affichage d'une colonne (un "champ" de la ligne courante if (i > 1) maZoneTexte.append("\t\t"); maZoneTexte.append(results.getString(i)); } // Sauter une ligne entre chaque résultat maZoneTexte.append("\n");

Programme Java (4) //--------------------------------------------- // Méthode makeAction lançant la requête protected void makeAction(int commandID) throws SQLException, Exception { if (commandID == cmdID) { // Stockage de la requête dans une chaine de caractères String maRequeteSQL = "SELECT Code, Contact FROM Clients WHERE Fonction = 'Propriétaire'"; // Affichage d'un message dans la zone de résultats maZoneTexte.append("Execution de : " + maRequeteSQL + "\n"); maZoneTexte.append("-----------------------------------------------\n"); // Chargement du driver JDBC-ODBC Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // Connexion à la base de données "CDRama" Connection maConnexion = DriverManager.getConnection("jdbc:odbc:Comptoir", "Comptoir", "Comptoir"); // Préparation d'une requête SQL Statement maRequete = maConnexion.createStatement(); // Envoi de la requête ResultSet mesResultats = maRequete.executeQuery(maRequeteSQL); // Affichage des résultats this.affichageResultats(mesResultats); // Nettoyage mesResultats.close(); maRequete.close(); maConnexion.close(); }

Programme Java (5) //--------------------------------------------- // Classe adaptateur pour gérer les événements liés au bouton class ButtonAdapter implements ActionListener { //Identification du bouton (pas très orienté objet ...!) private int m_commandID; ButtonAdapter(int commandID) { m_commandID = commandID; } public void actionPerformed(ActionEvent e) try { makeAction(m_commandID); } catch(Exception ex) {} // Classe adaptateur pour gérer les événements liés à la fenêtre class WndAdapter extends WindowAdapter public void windowClosing(WindowEvent e) e.getWindow().dispose(); System.exit(0);