Upload
serge-lemonnier
View
117
Download
0
Embed Size (px)
Citation preview
juin 2007 ~ Brigitte Groléas ~ 1
J201 (JOC)
Java Avancé
juin 2007 ~ Brigitte Groléas ~ 2
Le typesafe enums
Créer une énumération :enum HorizontalAlign{
LEFT,RIGHT, CENTER
}; Accéder :HorizontalAlign.LEFT;
HorizontalAlign.RIGHT;HorizontalAlign.CENTER;
juin 2007 ~ Brigitte Groléas ~ 3
Les Collections Pour chaque type de structure de données
(liste, ensemble, association) il existe une interface et plusieurs implémentations
Set : élément unique List : liste, avec doublons Map : suite de couples clé-valeur
List list = new ArrayList(); Set set = new HashSet(); Map map = new TreeMap();
juin 2007 ~ Brigitte Groléas ~ 4
Les implémentations de List
Vector (vieux, déconseillé par sun): doublons possibles, accès indexé, synchronisée (adaptée au multithread) lourd. Bien pour ajout ou suppression en fin de tableau ainsi que pour la recherche à un indice particulier (la représentation en mémoire est un tableau)
ArrayList : tableau, doublons possibles, accès indexé (non synchronosée) plus legere que vector (non adaptée au multi thread). Bien pour ajout ou suppression en fin de tableau ainsi que pour la recherche à un indice particulier (la représentation en mémoire est un tableau)Pour synchroniser une ArrayList : List synchronizedList =
Collections.synchronizedCollections(new ArrayList());" LinkedList : liste chainée, doublons possibles, accès indexé,
bien pour ajouter ou supprimer n’importe où dans la liste
juin 2007 ~ Brigitte Groléas ~ 5
Les tables d'association
java.util.Map : interface qui abstrait la notion de table d'association
HashMap : table gérée par Hcode (+ courante) HashSet : pas de doublon
java.util.SortedMap : interface idem Map mais ordonné induit un accès plus rapide.
TreeMap : arbre balancé TreeSet : pas de doublon
juin 2007 ~ Brigitte Groléas ~ 6
Les Itérateurs
List v = new ArrayList();Individu i = new Individu();v.add( i);
Iterator it = v.iterator(); while( it.hasNext()) {
Individu j = (Individu) it.next();j.affiche();
}
juin 2007 ~ Brigitte Groléas ~ 7
Générique
List<Individu> v =new ArrayList<Individu> ();Individu i = new Individu();v.add( i);
Iterator <Individu> it = v.iterator();while( it.hasNext()) {
Individu j = it.next();j.affiche();
}
juin 2007 ~ Brigitte Groléas ~ 8
La documentation
générer la documentation : javadoc
Syntaxe :javadoc fichier.java <RC>
Génère fichier.html, qui contient l ’index des classes, attributs et méthodes.
juin 2007 ~ Brigitte Groléas ~ 9
Mise en place de documentation
public class Perso{void f1(){ … }void f2(){ … }/** * Par les soirs bleus d'été, * j'irai par les sentiers ... * @version 1.1.1b 15/03/98 * @param qtte : un <i>chiffre</i> parmi d'autre * @see #f1() * @see #f2() * @return un chiffre */public int compte( int qte ){ // ... return 5; } }
•on obtient les fichiers :AllNames.htmlPackages.htmltree.html
juin 2007 ~ Brigitte Groléas ~ 10
La documentation de Sun
juin 2007 ~ Brigitte Groléas ~ 11
Saisie au clavier
String lireligne() throws java.io.IOException {StringBuffer tab = new StringBuffer( 20 );char c;while( ( c = (char)System.in.read() ) !
= '\r' ) tab.append( c );
return tab.toString();}
Gestion del'exception
Fin de ligne
Saisie d'un caractère au
clavierTransformation du
StringBuffer en String
juin 2007 ~ Brigitte Groléas ~ 12
Les classes imbriquées
Une classe à l'intérieur d'une autre classe. La classe imbriqué peut accéder aux données
privées de la classe supérieure
public class AA { private long var; public static class BB {
public int i; ... } ...
}une classe imbriquée static se
comporte exactement comme une classe normale, sauf pour la
visibilité des variables
Acces depuis l'extérieure parpackage.AA.BB
juin 2007 ~ Brigitte Groléas ~ 13
Classe interne
Classe imbriquée non static inner classe Associée à une instance particulière Ne peut pas exister sans l'intentiation de
la classe externe Les variables de la classe externe sont
accessibles à la classe interne
juin 2007 ~ Brigitte Groléas ~ 14
Nombre variable d’arguments
(varargs) public int totalise(int ... valeurs) {
int total = 0; for (int val : valeurs) {
total += val; } return total;
}
Appel : totalise(1,2,3));totalise(2,5,6,8,10));
int[] données = {1,2,3,4}; totalise(données));
juin 2007 ~ Brigitte Groléas ~ 15
Les fichiers
4 classes "mères", abstraites, pour traiter les flots de données héritant directement d'Object :
pour traiter de flots d'octets la classe InputStream la classe OutputStream
pour traiter de flots de caractères la classe Reader la classe Writer
juin 2007 ~ Brigitte Groléas ~ 16
La classe FileReader permet de lire des caractères dans un fichier.
La classe FileWriter permet d'écrire des caractères dans un fichier.
juin 2007 ~ Brigitte Groléas ~ 17
La sérialisation
Compresse les informations de l’objet pour qu’il soit ‘transportable’
Les données dans le fichier ne peuvent pas être lues comme du texte par une autre application
L’objet, lorsqu’il est lu, est décompressé, et retrouve son existence dans un tas (ie une vm)
permet d'échanger des données entre applications distribuées,
permet la persistance des objets : un objet est persistant si sa durée de vie est supérieure au programme qui l'a créé. Une des façons d'obtenir de le persistance est la sérialisation dans des fichiers.
juin 2007 ~ Brigitte Groléas ~ 18
Serialisable = transformable en une suite
d'octets
ObjectInputSteam en lecture, instancié à partir d'un InputStream, sa méthode readObject() peut lever une exception ClassNotFoundException.
readObject() renvoie un Object donc il faut faire un cast pour récupérer le bon type
ObjectOutputSteam en écriture, instancié à partir d'un OutputStream sa méthode writeObject()
juin 2007 ~ Brigitte Groléas ~ 19
Lire et écrire un texte dans le fichier
FileWriter fw= new FileWriter( "c:/titio.txt",true); fw.write( "velo\n"); fw.close(); FileReader fr = new FileReader( "c:/titio.txt"); BufferedReader br = new BufferedReader(fr); // pour ligne
ligne à ligne String s = br.readLine() ; fr.close(); FileReader reader = new FileReader("c:/titio.txt"); do { lu = reader.read(); if (lu != -1) { c = (char) lu; System.out.print( c); } } while (lu != -1); // tant que l'on est pas à la fin du fichier reader.close();
juin 2007 ~ Brigitte Groléas ~ 20
La classe File Tester l'existence d'un fichier File f = new File("c:/titio.txt"); if (f.exists()) System.out.println("existe"); else System.out.println("existe pas"); Récuperer le nom sans le chemin File file = new File("c:/titio.txt"); System.out.println(file.getName());//affiche titio.txt Renommer un fichier File nouveauNom=new File("c:/suiv.txt"); file.renameTo(nouveauNom); Lister les fichiers d'un répertoire File repertoire = new File("c:/"); String[] listeFichiers = repertoire.list(); for (int i=0;i < listeFichiers.length;i++) System.out.println(listeFichiers[i]);
juin 2007 ~ Brigitte Groléas ~ 21
Fenêtre de choix
class EssaiChoixFichier { public static void main(String[] argv) throws IOException {
JFileChooser dialogue = new JFileChooser(); PrintWriter ecrivain; File fichier;
if (dialogue.showOpenDialog(null) ==
JFileChooser.APPROVE_OPTION) { fichier = dialogue.getSelectedFile(); ecrivain = new PrintWriter(new FileWriter(fichier.getPath(),
true)); ecrivain.println(argv[0]); ecrivain.close(); }
System.exit(0); } }
Fait apparaître la fenêtre modale de dialogue permettant de sélectionner un
fichier.
juin 2007 ~ Brigitte Groléas ~ 22
Lire les 20 premiers octets du fichier titi et les afficher à
l’écran
InputStream fluxFichier = new FileInputStream ("c:/titi.txt");
byte contenuFichier [ ] = new byte [20];
fluxFichier.read (contenuFichier); System.out.println (new String
(contenuFichier));
fluxFichier.close ();
juin 2007 ~ Brigitte Groléas ~ 23
Lire et écrire un objet dans le fichier
FileOutputStream fichier = new FileOutputStream("c:/essai");
ObjectOutputStream flotEcriture = new ObjectOutputStream(fichier);for (int i=0; i<5; ++i) flotEcriture.writeObject(tab[i]);
flotEcriture.close(); FileInputStream fichier2 = new
FileInputStream("c:/essai");ObjectInputStream flotLecture = new
ObjectInputStream(fichier2); Object lu; for (int i=0; i<5; ++i) { lu = flotLecture.readObject(); if (lu instanceof Date) tab2[i]=(Date)lu;
else System.out.println("eee"); flotLecture.close();