La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

JAVA Les Entrées-sorties

Présentations similaires


Présentation au sujet: "JAVA Les Entrées-sorties"— Transcription de la présentation:

1 JAVA Les Entrées-sorties

2 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

3 java.io 1.0

4 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>

5 La classe InputStream

6 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>

7

8 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));

9 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 ( ); out.close(); } catch (IOException e) { e.printStackTrace (); => le fichier binaire Essai.dat est crée (non lisible)

10 La classe FileOutputStream

11 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 ();

12 La classe FileInputStream

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

14 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"); }

15 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()); }

16 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

17 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

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

19 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 (); ...

20 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

21 La classe RandomAccessFile

22 La classe RandomAccessFile

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

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

25 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

26 Contenu de java.io version 1.1

27 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

28 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

29 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(); ...

30 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>

31 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...

32 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, )); out.close(); ...

33 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 client : Aubert ,Jean D:\Java\Programmes\Serialisation>

34 BASES DE DONNEES java.sql

35 1) Créer la base de données

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

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

38 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

39 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()); }

40 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); }

41 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");

42 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(); }

43 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);


Télécharger ppt "JAVA Les Entrées-sorties"

Présentations similaires


Annonces Google