0% ont trouvé ce document utile (0 vote)
73 vues19 pages

Cours L3 Java Package CHAP 2

Transféré par

micheleprincy2709
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
73 vues19 pages

Cours L3 Java Package CHAP 2

Transféré par

micheleprincy2709
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Partie 2 ; Maintenant, n'importe quel autre programme peut, pour

accéder aux classes déclarées dans monpaquet,


PAQUETAGE ET LES BIBLIOTHEQUES DES utiliser l'instruction :
CLASSES JAVA
import monpaquet.*;
1. LES PACKAGES JAVA
Rappelez-vous que ce fichier doit se trouver dans un
Pour faciliter la réutilisation du code, Java permet de sous-répertoire appelé monpaquet. Cela permet au
regrouper plusieurs définitions de classes dans compilateur Java de localiser facilement votre paquet
un groupe logique appelé paquet. Si, par Ainsi pur définir un paquet Java , il faut correctement
exemple, vous créez un groupe des règles de situer les fichiers bytecode en respectant une règles
gestion qui modélisent les traitements de gestion précise . En effet , le nom du paquet doit correspondre
de votre entreprise, vous pouvez les réunir dans à un emplacement sur le système de fichiers . Par
un paquet. exemple, le paquet de nom java.shape2D doit être
Partant de cette idée , les concepteurs du langage ont placé dans un repértoire java/shape2D/ ( ou
développé une série de packages permettant java\shape2D\ sous un certain système ). Pour
d'utiliser l'ensemble des ressources de la machine correctement placer les fichiers de bytecode , deux
( c'est l'API Java). Chacun de ces packages ayant un méthodes sont applicables : soit manuellement , soit
domaine d'action bien déterminé comme par exemple, vous le faîtes dans l'ordre de compilation du fichier.
les connexions réseaux , les composants graphiques Dans ce dernier cas , il suffit de taper
… Il est donc possible d'utiliser cet ensemble de " javac - d <repertoire> file.java , où l'option d
packages en spécifiant le package dont vous avez permet de spécifier le répertoire dans lequel sera
besoin. stocké le code JVM ( les . class).
Mais vous pouvez de plus définir vos propres
packages et les utiliser dans vos programmes. 1.2. Création d’une archive java

1.1. Création des paquets Java propose l'utilitaire jar dans le JDK, un utilitaire
permettant de rassembler les différentes classes
La création d'un paquet se fait en deux étapes : la (fichiers .class) d'une application au sein d'une archive
première consiste à déterminer dans chaque fichier , à compressée, appelé package, afin d'en assurer
quel package il appartient. La seconde place les l'intégrité et la taille. La syntaxe de jar est proche de
fichiers de bytecode générée à une position bien celle de tar sous Unix .
précise de l'arborescence de fichiers de votre support Pour créer une archive java, il suffit d’exécuter la
de stockage ( disque dur ou autre) commande « jar cf nom_archive liste_des_fichiers »
Pour créer un paquet , il suffit d'ajouter sur la où les différents fichiers de la liste sont séparés par
des espaces. L’option « c » spécifie que l’on souhaite
premiere ligne le mot clé package suivi du nom de
créer une archive et « f » permet d’envoyer le flux dans
paquet auquel le fichier le fichier appartient et d'un l’archive dont le nom est spécifié. L’option « v », pour
point virgule. verbosité, permet de suivre l’évolution de la création de
l’archive. Par exemple, jar cvf MonArchive.jar *.class
package java.shape2D ; Pour extraire le contenu d’une archive java
// pour créer un paquet java.shape2D (décompresser) , il suffit d’exécuter la commande «jar
// Placer les fichiers d'un package xf nom_archive [liste__fichiers_à_extraire] ».
Par exemple, jar xvf MonArchive.jar *.class
Si vous ne spéficiez pas de package , le fichier
appartient à un paquet par défaut qui est le répertoire 1.3. Le classpath
courant dans lequel doivent se trouver les fichiers de
bytecode. A l'exécution, la JVM et les outils du JDK recherchent
les classes requises dans :
Par exemple, pour créer un paquet appelé monpaquet,
il suffit d'utiliser une instruction package au début du • Les classes de la plate-forme Java (stockées
fichier : dans le fichier rt.jar)
• Les classes d'extension de la plate-forme Java
package monpaquet; • Le classpath
public class MaClasse {
……………….. Le classpath permet de préciser au compilateur et à la
} JVM où ils peuvent trouver les classes dont ils ont
besoin pour la compilation et l'exécution d'une
} // fin classe application. C'est un ensemble de chemins vers des
répertoires ou des fichiers .jar dans lequel
ENI 1
l'environnement d'exécution Java recherche les ProjetJava
classes (celles de l'application mais aussi celles de
tiers) et éventuellement des fichiers de ressources
utiles à l'exécution de l'application. Ces classes ne rep1
concernent pas celles fournies par l'environnement maclasse1.class
d'exécution incluses dans le fichier rt.jar qui est
implicitement utilisé par l'environnement.
rep2 rep3 rep5
Le classpath est constitué de chemins vers des maclasse2 maclasse3 maclasse5
répertoires et/ou des archives sous la forme de
fichiers .jar ou .zip. Chaque élément du classpath peut
donc être : rep4
maclasse4
• Pour des fichiers .class : le répertoire qui
contient l'arborescence des sous répertoires
des packages ou les fichiers .class (si ceux-ci //maclasse1
sont dans le package par défaut) package rep1 ;
• Pour des fichiers .jar ou .zip : le chemin vers public class maclasse1 {
chacun des fichiers String nom ;
// constructeur
public void setNom( String nom)
Les éléments du classpath qui ne sont pas des
{ this.nom = nom ;}
répertoires ou des fichiers .jar ou .zip sont ignorés.
…………
} // fin classe
Ces chemins peuvent être absolus ou relatifs. Chaque
chemin est séparé par un caractère spécifique au // maclasse4
système d'exploitation utilisé : point virgule sous package rep1.rep3.rep4 ;
Windows et deux points sous Unix par exemple. public class maclasse4 {
…………
}
Exemple sous Windows :

.;C:\java\tests\bin;C:\java\lib\log4j- - Compiler toutes les classes


1.2.11.jar;"C:\Program Files\tests\tests.jar" # cd projetjava // se placer dans le répertoire
- Archiver toutes les arborescences
# jar cvf MonArchive.jar .
Dans cet exemple, le classpath est composé de quatre - Créer une classe principale utilisant l’archive dans
entités :
une autre répertoire REPTEST
# cd reptest
• le répertoire courant
• le répertoire C:\java\tests\bin Principale.java
• le fichier C:\java\lib\log4j-1.2.11.jar
• le fichier C:\Program Files\tests\tests.jar qui est import rep1 .*;
entouré par des caractères " parce qu'il y a un import rep1.rep2 .*;
espace dans son chemin import rep1 .rep3.*;
import rep1.rep3.rep4.*;
Sous Windows, on peut définir la variable import rep1 rep5.*;
d’environnement dans Poste de travail -> Propriétés -> public class Principale {
Avancé-> Variable d’environnement public static void main(String args[]) {maclasse1 p1
CLASSPATH = . ; c:\rep\MonArchive.jar =maclasse1();
maclasse2 p2 =maclasse2();
p1.setNom("Dupont") ;
Exemple de déploiement d’une application Java ………..
(projet) }
}
# javac –classpath MonArchive.jar Principale.java
# java –cp MonArchive.jar Principale

2. LES BIBLIOTHEQUES JAVA

Le JDK se compose de nombreuses classes


regroupées selon leur fonctionnalité en packages.

ENI 2
Paquet Description que si obj1 et obj2 désignent le même objet. Dans une
Langage Noyau principal du langage Java sous classe de Object, pour laquelle on a besoin de
Utilitaires Prise en charge des structures de pouvoir dire que deux objets distincts peuvent être
données utilitaires égaux, il faut redéfinir la méthode equals() héritée de
E/S Prise en charge de divers types Object.
d'entrée/sortie
Réseau Prise en charge de TCP/IP et 1.1.3. La classe String
programmation des sockets
AWT Conception GUI et gestion des Une chaîne de caractères est contenue dans un objet
événements de la classe String
Texte Prise en charge de
l'internationalisation On peut initialiser une variable String sans appeler
explicitement un constructeur : le compilateur se
Sécurité Prise en charge de la sécurité par
charge de créer un objet.
cryptographie
RMI Prise en charge de la
programmation distribuée Exemple : deux déclarations de chaines
SQL Prise en charge de l'interrogation identiques.
des bases de données avec SQL
String uneChaine = "bonjour";
Pour importer un paquet , il suffit d'utiliser l'instruction String uneChaine = new String("bonjour");
import nompaquet ;
Les objets de cette classe ont la particularité d'être
constants. Chaque traitement qui vise à transformer un
Par exemple, objet de la classe est implémenté par une méthode qui
import monpaquet.*; // importer toutes les classes du laisse l'objet d'origine inchangé et renvoie un nouvel
paquet objet String contenant les modifications.
import monpaquet.Bonjour; // importer la classe
Bonjour
import java.awt.Button ; // on importe la classe Button Exemple :

private String uneChaine;


class exemple { void miseEnMajuscule(String chaine) {
static void main (String argv []) { uneChaine = chaine.toUpperCase()
java.shape2D circle c1 = new java.shape2D.circle
() ; // la classe circle se trouve dans le paquet Il est ainsi possible d'enchainer plusieurs méthodes :
java.shape2D
}
Exemple :
1. Le package java.lang uneChaine = chaine.toUpperCase().trim();

Ce package de base contient les classes L'opérateur + permet la concaténation de chaines de


fondamentales tel que Object, Class, Math, System, caractères.
String, StringBuffer, Thread, les wrappers etc ...
Certaines de ces classes sont détaillées dans les
La comparaison de deux chaînes doit se faire via la
sections suivantes.
méthode equals() qui compare les objets eux même et
non l'opérateur == qui compare les références de ces
Il contient également plusieurs classes qui permettent objets :
de demander des actions au système d'exploitation sur
laquelle la machine virtuelle tourne, par exemple les
classes ClassLoader, Runtime, SecurityManager. Exemple :

1.1. La classe Object String nom1 = new String("Bonjour");


String nom2 = new String("Bonjour");
C'est la super classe de toutes les classes Java : System.out.println(nom1 == nom2); // affiche false
toutes ces méthodes sont donc héritées par toutes les
classes Java : System.out.println( nom1.equals(nom2)); //
affiche true
1.1.2. La méthode equals()
La classe String possède de nombreuses méthodes
dont voici les principales :
La méthode equals() implémente une comparaison par
défaut. Sa définition dans Object compare les
références : donc obj1.equals(obj2) ne renverra true
ENI 3
Méthodes la classe String Rôle if (chaine.isEmpty()){
System.out.println("la chaine est vide");
renvoie le nième caractère }
charAt(int) } catch (Exception e) {
de la chaine
System.out.println("la chaine est null");
compare la chaîne avec }
compareTo(String)
l'argument
chaine = "test";
ajoute l'argument à la chaîne if (chaine.isEmpty()){
concat(String)
et renvoie la nouvelle chaîne System.out.println("la chaine est vide");
vérifie si la chaîne se } else {
endsWith(String) System.out.println("la chaine n'est pas
termine par l'argument
vide");
compare la chaîne sans tenir }
equalsIgnoreCase(String)
compte de la casse
chaine = "";
renvoie la position de début if (chaine.isEmpty()){
indexOf(String) à laquelle l'argument est System.out.println("la chaine est vide");
contenu dans la chaine } else {
System.out.println("la chaine n'est pas
renvoie la dernière position à vide");
lastIndexOf(String) laquelle l'argument est }
contenu dans la chaine }
renvoie la longueur de la }
lenght()
chaine
Résultat :
renvoie la chaîne dont les
la chaine est null
replace(char,char) occurrences d'un caractère
la chaine n'est pas vide
sont remplacées
la chaine est vide
Vérifie si la chaîne
startsWith(String int) commence par la sous 1.1.6. Les wrappers
chaîne
Les objet de type wrappers (enveloppeurs)
renvoie une partie de la
substring(int,int) représentent des objets qui encapsulent une donnée
chaine
de type primitif et qui fournissent un ensemble de
renvoie la chaîne en méthodes qui permettent notamment de faire des
toLowCase() conversions.
minuscule

renvoie la chaîne en Ces classes offrent toutes les services suivants :


toUpperCase()
majuscule

enlève les caractères non • un constructeur qui permet une instanciation à


trim() partir du type primitif et un constructeur qui
significatifs de la chaine
permet une instanciation à partir d'un objet
String
• une méthode pour fournir la valeur primitive
La méthode isEmtpy() ajoutée dans Java SE 6 facilite représentée par l'objet
le test d'une chaîne de caractères vide. • une méthode equals() pour la comparaison.

Cette méthode utilise les données de l'instance de Les méthodes de conversion opèrent sur des
l'objet, il est donc nécessaire de vérifier que cette instances, mais il est possible d'utiliser des méthodes
instance n'est pas null pour éviter la levée d'une statiques.
exception de type NullPointerException.

Exemple :
Exemple :
int valeur =
package com.jmdoudoux.test.java6; Integer.valueOf("999").intValue();

public class TestEmptyString {


Ces classes ne sont pas interchangeables avec les
types primitifs d'origine car il s'agit d'objet.
public static void main(String args[]) {

String chaine = null;


Exemple :
try {
ENI 4
Float objetpi = new Float("3.1415"); Integer monnombre=new Integer(montexte);
System.out.println(5*objetpi); // erreur à la compil int i = monnombre.intValue(); //conversion d'Integer en
int
Pour obtenir la valeur contenue dans l'objet, il faut Integer I =Integer.parseInt(montexte); //chaîne en
utiliser la méthode typeValue() ou type est le nom du entier
type standard System.out.println ("i = "+i,);

Exemple : Vous pouvez utiliser les méthodes parseDouble,


parseFloat pour convertir une chaîne de caractères
Integer Entier = new Integer("10"); String en nombre réel
int entier = Entier.intValue();
1.1.6. La classe Math
Les classes Integer, Long, Float et Double définissent
toutes les constantes MAX_VALUE et MIN_VALUE qui La classe Math fournit des méthodes utiles qui
représentent leurs valeurs minimales et maximales. implémentent des fonctions mathématiques courantes.
Cette classe n'est pas instanciée ; elle est déclarée
Lorsque l'on effectue certaines opérations comme final, ce qui signifie qu'elle ne comporte pas de
mathématiques sur des nombres à virgules flottantes sous-classe. Parmi les méthodes de cette classe, se
(float ou double), le résultat peut prendre l'une des trouvent : sin(en radians) , cos, exp, log,abs max(x,y),
valeurs suivantes : min(x,y), sqrt , tan , asin(double) : arc sinus (valeur
dans l'intervalle [-Π / 2, +Π / 2]) , acos(double) : arc
• NEGATIVE_INFINITY : infini négatif causé par cos (valeur dans l'intervalle [0, + Π , atan (double) :
la division d'un nombre négatif par 0.0 arc tangente (valeur dans l'intervalle [-Π / 2, + Π / 2]) ,
• POSITIVE_INFINITY : infini positif causé par la atan2(double) : cette dernière fonction retourne la
division d'un nombre positif par 0.0 valeur (en radians) de l'angle théta des coordonnées
• NaN: n'est pas un nombre (Not a Number) polaires (r et théta) du point correspondant aux
causé par la division de 0.0 par 0.0 coordonnées cartésiennes qui sont passées comme
arguments. Par exemple,
Il existe des méthodes pour tester le résultat : double theta = Math.atan2(10,10);
Si on utilise des arguments illégaux, les méthodes de
la classe Math génèrent une exception. Elles
Float.isNaN(float); //idem avec double
retournent NaN (Not a Number).
Double.isInfinite(double); // idem avec float
La classe Math déclare aussi les constantes comme PI
qui peuvent être facilement utilisées dans les calculs.
Exemple : Voici quelques exemples d'utilisation de ces méthodes.

float res = 1.0 / 0.0; int i,j = -4;


double a = 4.2, b = Math.PI, c;
if (Float.isInfinite(res)) { ... }; i = Math.abs(j); //préfixer par Math !!!
c = Math.min(a,b); double d1 = Math.sin (45);
La constante Float.NaN n'est ni égale à un nombre double d2 = 23.4;
dont la valeur est NaN ni à elle même. Float.NaN == double d3 = Math.exp (d2);
Float.NaN retourne False
Autres fonctions
Lors de la division par zéro d'un nombre entier, une
exception est levée. - pow (double, double) : élévation du premier argument
à la puissance dont la valeur est le second argument.
Si le premier argument est nul, le second doit être
Exemple : strictement positif. Si le premier argument est
strictement négatif, le second doit être une valeur
System.out.println(10/0); entière.
- random (génération à chaque appel d'un nombre
Exception in thread "main" pseudo-aléatoire compris entre 0 et 1.0).
java.lang.ArithmeticException: / by zero (Il existe également dans le package java.util une
At test9.main(test9.java:6) classe Random qui permet une gestion plus complète
des nombres aléatoires.)
La conversion d'une chaîne de caractères String en On dispose aussi de trois méthodes pour les arrondis :
entier int ceil (arrondi à l'entier supérieur), floor (arrondi à
l'entier inférieur), round (arrondi par rapport à 0,5). Ces
trois méthodes admettent des "double" comme
Exemple : arguments et elles retourne un double sans partie
décimale et non pas un entier. round admet aussi des
String montexte = new String(" 10 ");
ENI 5
arguments de type "float" auquel cas la valeur • des justifications possibles avec certains
retournée est du type "int". formats
• l'utilisation de la localisation pour les données
double x = 0.751, z; numériques et de type date
double d = Math.pow (x, 10);
z = Math.ceil ( x ); // z = 1.0
z = Math.floor ( x ); // z = 0.0 Exemple (java 1.5):
z = Math.round ( x ); // z = 1.0
import java.util.*;
1.1.7. La classe System public class TestPrintf2 {

Cette classe possède de nombreuses fonctionnalités public static void main(String[] args) {
pour utiliser des services du système d'exploitation. System.out.printf("%d \n" ,13);
System.out.printf("%4d \n" ,13);
1.1.7.1. L'utilisation des flux d'entrée/sortie System.out.printf("%04d \n" ,13);
standard System.out.printf("%f \n" ,3.14116);
System.out.printf("%.2f \n" ,3.14116);
La classe System défini trois variables statiques qui System.out.printf("%s \n" ,"Test");
permettent d'utiliser les flux d'entrée/sortie standards System.out.printf("%10s \n" ,"Test");
du système d'exploitation. System.out.printf("%-10s \n" ,"Test");
System.out.printf("%tD \n" , new Date());
System.out.printf("%tF \n" , new Date());
Variable Type Rôle System.out.printf("%1$te %1$tb %1$ty \n" , new
Date());
Entrée standard du système. System.out.printf("%1$tA %1$te %1$tB %1$tY \n", new
In PrintStream
Par défaut, c'est le clavier. Date());
System.out.printf("%1$tr \n" , new Date());
Sortie standard du système.
Out InputStream }
Par défaut, c'est le moniteur.

Sortie standard des erreurs du }


Err PrintStream système. Par défaut, c'est le
Résultat :
moniteur.
C:\tiger>java TestPrintf2
13
Exemple : 13
0013
System.out.println("bonjour"); 3,141160
3,14
La classe système possède trois méthodes qui Test
permettent de rediriger ces flux. Test
Test
08/23/04
2004-08-23
23 ao¹t 04
La méthode printf() dont le mode lundi 23 ao¹t 2004
fonctionnement bien connu dans le 03:56:25 PM
langage C a été reprise pour être
ajoutée dans l'API de Java.
Une exception est levée lors de l'exécution si un des
formats utilisés est inconnu.
Exemple :
1.1.7.2. Les variables d'environnement et les
public class TestPrintf { propriétés du système
public static void main(String[] args) {
System.out.printf("%4d",32); Il est possible de renvoyer la valeur de la propriété
} système dont le nom est fourni en paramètre ainsi que
} les propriétés standards fournies par l'environnement
java et par des propriétés ajoutées par l'utilisateur.
La méthode printf propose : Jusqu'au JDK 1.4, il est nécessaire d'utiliser ces
propriétés de la JVM.
• un nombre d'arguments variable
• des formats standards pour les types primitifs, Voici une liste non exhaustive des propriétés fournies
String et Date par l'environnement java :

ENI 6
Nom de la propriété Rôle System.out.println("java.home
="+System.getProperty("java.home"));
java.version Version du JRE System.out.println("java.vm.specification.version ="
+System.getProperty("java.vm.specification.versio
java.vendor Auteur du JRE n"));
System.out.println("java.vm.specification.vendor ="
java.vendor.url URL de l'auteur +System.getProperty("java.vm.specification.vendo
Répertoire d'installation de r"));
java.home System.out.println("java.vm.specification.name ="
java
+System.getProperty("java.vm.specification.name"
Version de l'implémentation la ));
java.vm.version System.out.println("java.vm.version
JVM
="+System.getProperty("java.vm.version"));
Auteur de l'implémentation de System.out.println("java.vm.vendor
java.vm.vendor
la JVM ="+System.getProperty("java.vm.vendor"));
System.out.println("java.vm.name
Nom de l'implémentation de la ="+System.getProperty("java.vm.name"));
java.vm.name
JVM System.out.println("java.specification.version ="
Version des spécifications de +System.getProperty("java.specification.version"))
java.specification.version ;
la JVM
System.out.println("java.specification.vendor ="
Auteur des spécifications de la +System.getProperty("java.specification.vendor"));
java.specification.vendor System.out.println("java.specification.name ="
JVM
+System.getProperty("java.specification.name"));
Nom des spécifications de la System.out.println("java.class.version ="
java.specification.name
JVM +System.getProperty("java.class.version"));
System.out.println("java.class.path ="
Chemin du ou des répertoires +System.getProperty("java.class.path"));
java.ext.dirs
d'extension System.out.println("java.ext.dirs
os.name Nom du système d'exploitation ="+System.getProperty("java.ext.dirs"));
System.out.println("os.name
Architecture du système ="+System.getProperty("os.name"));
os.arch System.out.println("os.arch
d'exploitation
="+System.getProperty("os.arch"));
Version du système System.out.println("os.version
os.version
d'exploitation ="+System.getProperty("os.version"));
System.out.println("file.separator
Séparateur de fichiers ="+System.getProperty("file.separator"));
file.separator (exemple : "/" sous Unix, "\" System.out.println("path.separator
sous Windows) ="+System.getProperty("path.separator"));
Séparateur de chemin System.out.println("line.separator
path.separator (exemple : ":" sous Unix, ";" ="+System.getProperty("line.separator"));
sous Windows) System.out.println("user.name
="+System.getProperty("user.name"));
line.separator Séparateur de ligne System.out.println("user.home
="+System.getProperty("user.home"));
user.name Nom du user courant System.out.println("user.dir
="+System.getProperty("user.dir"));
Répertoire d'accueil du user }
user.home
courant }
Répertoire courant au moment
user.dir Par défaut, l'accès aux propriétés système est restreint
de l'initialisation de la propriété
par le SecurityManager pour les applets.

Exemple : Pour définir ces propres propriétés, il faut utiliser


l'option -D de l'interpréteur java en utilisant la ligne de
public class TestProperty { commande.

public static void main(String[] args) { La méthode statique getProperty() permet d'obtenir la
System.out.println("java.version valeur de la propriété dont le nom est fourni en
="+System.getProperty("java.version")); paramètre. Une version surchargée de cette méthode
System.out.println("java.vendor permet de préciser un second paramètre qui
="+System.getProperty("java.vendor")); contiendra la valeur par défaut, si la propriété n'est pas
System.out.println("java.vendor.url définie.
="+System.getProperty("java.vendor.url"));
ENI 7
1.2. Les classes Runtime et Process
Exemple : obtenir une variable système (java 1.1,
1., 1.3 et 1.4)
La classe Runtime permet d'interagir avec le système
package com.jmd.test; dans lequel l'application s'exécute : obtenir des
informations sur le système, arrêt de la machine
public class TestPropertyEnv { virtuelle, exéecution d'un programme externe.

public static void main(String[] args) {


Cette classe ne peut pas être instanciée mais il est
System.out.println("env.windir
="+System.getProperty("env.windir")); possible d'obtenir une instance en appelant la méthode
} statique getRuntime() de la classe RunTime.
}
Les méthodes totalMemory() et freeMemory()
Exemple : Execution
permettent d'obtenir respectivement la quantité totale
C:\tests>java -Denv.windir=%windir% -cp . de la mémoire et la quantité de mémoire libre.
com.jmd.test.TestPropertyEnv
env.windir =C:\WINDOWS
Exemple :
Java 5 propose de nouveau une implémentation pour
package com.jmd.tests;
la méthode System.getEnv() possédant deux
surcharges : public class TestRuntime1 {
public static void main(String[] args) {
• Une sans paramètre qui renvoie une collection Runtime runtime = Runtime.getRuntime();
des variables système System.out.println("Mémoire totale = " +
• Une avec un paramètre de type string qui runtime.totalMemory());
contient le nom de la variable à obtenir System.out.println("Memoire libre = " +
runtime.freeMemory());
}
Exemple (Java 5):
}
package com.jmd.tests;
La méthode exec() permet d'exécuter des processus
public class TestPropertyEnv { sur le système d'exploitation ou s'exécute la JVM. Elle
lance la commande de manière asynchrone et renvoie
public static void main(String[] args) {
un objet de type Process pour obtenir des informations
System.out.println(System.getenv("windir"));
} sur le processus lancé.
}
Il existe plusieurs surcharges de cette méthode
La surcharge sans argument permet d'obtenir une pouvant toutes entre autre lever une exception de type
collection de type Map contenant les variables SecurityException,IOException, NullPointerException :
d'environnement système.

Méthode Remarque
Exemple (Java 5) :
Process exec(String command)
package com.jmd.tests;
Process exec(String[] cmdarray)
import java.util.Iterator;
import java.util.Map; Process exec(String[] cmdarray,
import java.util.Set; String[] envp)

public class TestPropertyEnv { Process exec(String[] cmdarray, (depuis Java


String[] envp, File dir) 1.3)
public static void main(String[] args) {
Map map = System.getenv(); Process exec(String cmd, String[]
Set cles = map.keySet(); envp)
Iterator iterator = cles.iterator();
while (iterator.hasNext()) { Process exec(String command, (depuis Java
String cle = (String) iterator.next(); String[] envp, File dir) 1.3)
System.out.println(cle+" : "+map.get(cle));
}
}
}
ENI 8
La commande à exécuter peut être fournie sous la
forme d'une chaîne de caractères ou sous la forme Exemple :
d'un tableau dont le premier élément est la commande package com.jmd.tests;
et les éléments suivants sont ses arguments. Deux des
surcharges accepte un objet de File qui encapsule le import java.io.BufferedReader;
répertoire dans lequel la commande va être exécutée. import java.io.InputStreamReader;

Important : la commande exec() n'est pas un public class TestRuntime2 {


interpréteur de commande. Il n'est par exemple pas public static void main(String[] args) {
possible de préciser dans la commande une redirection try {
vers un fichier. Ainsi pour exécuter une commande de Process proc = Runtime.getRuntime().exec("cmd.exe
l'interpréteur DOS sous Windows, il est nécessaire de /c DIR c:\\rep");
préciser l'interpréteur de commande à utiliser BufferedReader in =
(command.com sous Windows 95 ou cmd.exe sous new BufferedReader(new
Windows 2000 et XP). InputStreamReader(proc.getInputStream()));
String str;
Remarque : avec l'interpréteur de commande cmd.exe, while ((str = in.readLine()) != null) {
il est nécessaire d'utiliser l'option /c qui permet de System.out.println(str);
demander de quitter l'interpréteur à la fin de l'exécution }
de la commande. in.close();
proc.waitFor();
L'inconvénient d'utiliser cette méthode est que la } catch (Exception e) {
commande exécutée est dépendante du système e.printStackTrace();
d'exploitation. }
}
Voici un exemple sous Windows renvoyant le résultat }
d'un dir dans un fichier
Sous Windows, il est possible d'utiliser un fichier dont
Runtime runtime = Runtime.getRuntime(); l'extension est associée à une application
String[] args = { "cmd.exe", "/C", "dir C:\\
>fichier.txt" };
Demarrer NotePad
final Process process = runtime.exec(args);
public class Test {
public static void main(String[] args) throws Exception
// Et tout le traitement des flux d'E/S vu plus haut
{
Et voici l'équivalent pour les systèmes Linux/Unix Process p = Runtime.getRuntime().exec(
(commande ls) : "\"c:/program files/windows/notepad.exe\"");
p.waitFor();
Runtime runtime = Runtime.getRuntime(); }
String[] args = { "/bin/sh", "-c", "ls / >fichier.txt" }; }
final Process process = runtime.exec(args); Pour lire un fichier existant,
Process proc =
// Et tout le traitement des flux d'E/S vu plus haut
Runtime.getRuntime().exec("notepad.exe c:\\fic.txt");
La classe abstraite Process encapsule un processus :
Démarrer Word
son implémentation est fournie par la JVM puisqu'elle
est dépendante du système. String fileName = "c:\\Applications\\My
Les méthodes getOutputStream(), getInputStream() Documents\\test.doc";
et getErrorStream() permettent d'avoir un accès String[] commands = {"cmd", "/c", "start",
respectivement au flux de sortie, d'entrée et d'erreur du "\"DummyTitle\"",fileName};
processus. Runtime.getRuntime().exec(commands);
La méthode waitFor() permet d'attendre la fin du
processus Exemple : Ouvrir un fichier Word
La méthode exitValue() permet d'obtenir le code retour
du processus. Elle lève une exception de type Process proc = Runtime.getRuntime().exec("cmd.exe
IllegalThreadStateException si le processus n'est pas /c \"c:\\test.doc\"");
terminé.
La méthode destroy() permet de détruire le processus

ENI 9
long duree= System.currentTimeMillis() – start ;
Start Excel System.out.println(duree);
import java.io.IOException;

class StartExcel {
public static void main(String args[]) 2. Le package java.util
throws IOException
{
Runtime.getRuntime().exec("cmd /c start Ce package contient un ensemble de classes utilitaires
excel.exe"); : la gestion des dates (Date et Calendar), la génération
} de nombres aléatoires (Random), la gestion des
} collections ordonnées ou non tel que la table de
hachage (HashTable), le vecteur (Vector), la pile
(Stack) ..., la gestion des propriétés (Properties), des
Pour charger une feuille
classes dédiées à l'internationalisation
(ResourceBundle, PropertyResourceBundle,
import java.io.IOException; ListResourceBundle) etc ...

class StartExcel {
Certaines de ces classes sont présentées plus en
public static void main(String args[])
détail dans les sections suivantes.
throws IOException
{
String fileName = "c:\\temp\\xls\\test2.xls"; 2.1. La classe StringTokenizer
String[] commands = {"cmd", "/c", "start",
"\"DummyTitle\"",fileName}; Cette classe permet de découper une chaîne de
Runtime.getRuntime().exec(commands); caractères (objet de type String) en fonction de
} séparateurs. Le constructeur de la classe accepte 2
} paramètres : la chaîne à décomposer et une chaîne
contenant les séparateurs.
It's important to pass a dummy title to the Windows
start command where there is a possibility that the StringTokenizer(String str, [String delim]) :
filename contains a space. construit un ensemble de tokens en utilisant comme
délimiteurs les caractères de la chaîne delim

PDF (Windows only) Les méthodes


public class ShowPDF {
public static void main(String[] args) throws int countTokens():calcul le nombre de fois que la
Exception { méthode nextToken() peut être appelée avant la
Process p = génération d'une exception.
Runtime.getRuntime() boolean hasMoreTokens():fournit un contrôle
.exec("rundll32 url.dll,FileProtocolHandler d'itération sur la collection en renvoyant un booléen
c:/pdf/mypdf.pdf"); indiquant si il reste encore des éléments.
p.waitFor(); String nextToken() :retourne le prochain jeton à
System.out.println("Done."); partir de l'objet StringTokenizer.
}
} Exemple ( code Java 1.1 ) :
import java.util.*;

class test9 {
1.3. Détermination du temps écoulé entre deus
public static void main(String args[]) {
points d’un programme StringTokenizer st = new
StringTokenizer("chaine1,chaine2,chaine3,
- System.currentTimeMillis() chaine4"
,",");
En utilisant la méthode statique currentTimeMillis() de while (st.hasMoreTokens()) {
la classe System. Cette méthode renvoie un long System.out.println((st.nextToken()).toString());
}
représentant la différence de temps entre le 1er janvier
}
1970 à minuit et le temps système à l’exécution de }
l’instruction. Cette différence s’exprime en fonction de
l’unité de temps de l’OS (la milliseconde, voire C:\java>java test9
quelques dizaines de milliseconde). chaine1
long start= System.currentTimeMillis() ; chaine2
chaine3
// … instructions à chronométrer
chaine4
ENI 10
if (maintenant.getDay() == 1)
System.out.println(" lundi ");

2.2. La classe Random Le constructeur d'un objet Date l'initialise avec la date
et l'heure courante du système.
La classe Random permet de générer des nombres Exemple 2 :
pseudo-aléatoires. Après l'appel au constructeur, il import java.util.*;
suffit d'appeler la méthode correspondant au type import java.text.*;
désiré : nextInt(), nextLong(), nextFloat() ou
nextDouble() public class TestHeure {
public static void main(java.lang.String[] args) {
Date date = new Date();
Méthodes valeur de retour System.out.println(DateFormat.getTimeInstance
().
entre Integer.MIN_VALUE et format(date));
nextInt()
Interger.MAX_VALUE }
}
entre long.MIN_VALUE et
nextLong()
long.MAX_VALUE

nextFloat() ou
entre 0.0 et 1.0
nextDouble()
Résultat :
Exemple ( code Java 1.1 ) : 22:05:21

import java.util.*;
class test9 { Exemple 3 : L'exemple ci-dessous met en oeuvre un
public static void main (String args[]) { certain nombre de ce méthodes. On demande à
Random r = new Random(); l'utilisateur d'entrer sa date de naissance et on retourne
int a = r.nextInt(10); //entier entre -9 et 9 son age.
System.out.println("a = "+a);
} import java.applet.*;
} import java.awt.*;
import java.util.*; //importation du package
2.3. Les classes Date et Calendar public class date10 extends Applet
{ int jour=15,mois=8,annee=70; //valeurs initiales
En Java 1.0, la classe Date permet de manipuler les Font font = new Font("Helvetica",0,12);
Label lb1,lb2,lb3;
dates. la classe Date permet de manipuler les dates.
TextField tf1=new TextField(""+jour,2);
Le constructeur de cette classe peut prendre les TextField tf2=new TextField(""+(mois-1),2);
formes Date( ), Date(long date), Date(int year, int TextField tf3=new TextField(""+annee,2);
month, int date), Date(int year, int month, int date, Date D = new Date(); //date actuelle du client
int hrs, int min), Date(int year, int month, int date, String s;
int hrs, int min, int sec) et Date(String s). Dans ce public void init()
{ setBackground(Color.lightGray);
dernier cas, la chaîne est de la forme "day, date month
setFont(font);
year hrs:min:sec GMT" dans laquelle day est le nom du lb1=new Label("Jour",2);
jour sous la forme Mon, Tue, Wed, Thu, Fri, Sat ou add(lb1); add(tf1);
Sun. lb2=new Label("Mois",2);
add(lb2); add(tf2);
Les méthodes les plus utiles sont getTime( ) qui lb3=new Label("Année",2);
retourne un long correspond au nombre de add(lb3); add(tf3);}
public boolean action(Event evt, Object arg)
millisecondes écoulées entre le 1-01-1970 et la date
{ if (evt.target==tf1) {
utilisée, getDate( ) qui retourne un int s=tf1.getText(); jour=Integer.parseInt(s);}
correspondant à la date du jour, getDay( ) qui else if (evt.target==tf2) {
retourne le jour, getMonth( ), getYear( ), s=tf2.getText();mois=Integer.parseInt(s)-1;}//0 à
getHours( ), getMinutes( ). 11 !!!
else if (evt.target==tf3){
s=tf3.getText(); annee=Integer.parseInt(s);}
Exemple 1 : else return super.action(evt,arg);
repaint(); return true;}
import java.util.*; public void paint(Graphics g)
... { g.drawString("Nous sommes le : "+D,20,50);
Date maintenant = new Date(); g.drawString("Entrer votre date de
naissance :",20,70);
ENI 11
Date Dnai = new Date(annee,mois,jour); Calendar.SATURDAY)
g.drawString("né(e) le : "+Dnai.toString(),20,90); System.out.println(" nous sommes samedi ");
Date Dage = new Date((long)(D.getTime()- if (c.get(Calendar.DAY_OF_WEEK) ==
Dnai.getTime())); Calendar.SUNDAY)
s = "Vous avez "+(Dage.getYear()-70)+" ans, "; System.out.println(" nous sommes dimanche ");
//origine 1970
s = s+Dage.getMonth()+" mois et "; }
s = s+(Dage.getDate()-1)+" jours."; }
g.drawString(s,20,110);
g.drawString(""+D.getTime()+" ms écoulées Résultat :
depuis le 01/01/1970 minuit",20,130);
} nous sommes lundi

Comment convertir une date en chaîne ?


En java 1.1, de nombreuses méthodes
et constructeurs de la classe Date sont La conversion d'une date en chaîne de caractères est
deprecated, notamment celles qui délicate au premier abord. En effet, le format des
permettent de manipuler les éléments dates est très différent d'une langue à l'autre.
qui composent la date et leur Heureusement, les fonctions d'internationalisation de
formatage : il faut utiliser la classe Java vont faire le travail à notre place...
Calendar. /* IMPORT */

Exemple 1: import java.util.Locale;


import java.text.DateFormat;
public String dateAujourdhui() {
Calendar now = Calendar.getInstance(); /* 1. Choix de la langue */
int hh = now.get(Calendar.HOUR_OF_DAY); Locale locale = Locale.getDefault();
int mm = now.get(Calendar.MINUTE);
int ss = now.get(Calendar.SECOND);
int mois = now.get(Calendar.MONTH) + 1; /* 2. Construction du DateFormat en choisiant un
int jour= now.get(Calendar.DAY_OF_MONTH); format :
int annee = now.get(Calendar.YEAR); * SHORT = 01/01/2002
return (jour+" / "+mois+" / " +annee+ " "+ * FULL = lundi 1 janvier 2002
hh+":"+mm+":"+ss ); */
} DateFormat dateFormat =
DateFormat.getDateInstance(DateFormat.FULL,
locale);

Exemple 2 : /* 3. Affichage */
System.out.println(dateFormat.format(maDate));
import java.util.*;
Si vous souhaitez utiliser un format de sortie plus
public class TestCalendar { exotique, vous pouvez accéder directement à la
public static void main(java.lang.String[] args) { classe java.text.SimpleDateFormat.

Calendar c = Calendar.getInstance(); DateFormat dateFormat = new


if (c.get(Calendar.DAY_OF_WEEK) == SimpleDateFormat("hh'h'mm dd-MM-yy"); /*
Calendar.MONDAY) résultat : "23h59 31-12-2000" */
System.out.println(" nous sommes lundi ");
if (c.get(Calendar.DAY_OF_WEEK) ==
Calendar.TUESDAY) Comment convertir une chaîne en Date ?
System.out.println(" nous sommes mardi ");
if (c.get(Calendar.DAY_OF_WEEK) == Pour convertir une chaine en date, il faut connaître le
Calendar.WEDNESDAY) format de la date. Par défaut, une seule classe dans
System.out.println(" nous sommes mercredi "); l'API gère les formats de date :
if (c.get(Calendar.DAY_OF_WEEK) == java.text.SimpleDateFormat. On utilise le parser de
Calendar.THURSDAY)
date pour effectuer la conversion. Voici une méthode
System.out.println(" nous sommes jeudi ");
if (c.get(Calendar.DAY_OF_WEEK) == générique :
Calendar.FRIDAY)
System.out.println(" nous sommes vendredi "); public static Date stringToDate(String sDate,
if (c.get(Calendar.DAY_OF_WEEK) == String sFormat) throws Exception {
ENI 12
SimpleDateFormat sdf = new cal1.set(Calendar.MINUTE,0);
SimpleDateFormat(sFormat); cal1.set(Calendar.SECOND,0);
return sdf.parse(sDate); cal1.set(Calendar.MILLISECOND,0);
cal2.set(Calendar.HOUR_OF_DAY,0);
}
cal2.set(Calendar.MINUTE,0);
cal2.set(Calendar.SECOND,0);
Le parser déclenche l'exception ParseException quand cal2.set(Calendar.MILLISECOND,0);
la chaine ne respecte pas le format. La documentation
sur java.text.SimpleDateFormat décrit le format d'une return ((cal1.getTime().getTime() -
date, et des lettres à utiliser pour caractériser le jour, le cal2.getTime().getTime()) / (24*60*60*1000));
mois, ... etc.
AJOUTER UN NOMBRE DE JOURS A UNE
DATE
import java.util.Date;
import java.text.SimpleDateFormat; Exemple 1 : on rajoute 1000 millisecondes
Date dDate = new Date();
public class TestDate Calendar calendar = new GregorianCalendar();
{ calendar.setTime(dDate.getTime());
calendar.add(Calendar.MILLISECOND,1000);
public static void testParseDate(String sDate) {
try { Exemple 2 : il faut utiliser java.util.Calendar
Date d = stringToDate(sDate, "yyyy-MM-dd"); et on ajoute 5 jours
System.out.println(d.toString()); Date date = new Date() ; Date dateplus5;
} Calendar cal = Calendar.getInstance();
catch(Exception e) { cal.setTime(date);
System.err.println("Exception :"); cal.add(Calendar.DATE,5);
datelus5 =cal.getTime();
e.printStackTrace();
}
2.4. La classe SimpleDateFormat
}
La classe SimpleDateFormat permet de formater et
public static Date stringToDate(String sDate, String d'analyser une date en tenant compte d'une Locale.
sFormat) throws Exception { Elle hérite de la classe abstraite DateFormat.
SimpleDateFormat sdf = new
SimpleDateFormat(sFormat); Pour réaliser ces traitements cette classe utilise un
return sdf.parse(sDate); modèle (pattern) sous la forme d'une chaîne de
} caractères.

public static void main(String[] args) { La classe DataFormat propose plusieurs méthodes
pour obtenir le modèle par défaut de la Locale courante
testParseDate("2001-10-20");
:
testParseDate("2002/10-20"); // ParseException
testParseDate(null); // NullPointerException
• getTimeInstance(style)
}
• getDateInstance(style)
} • getDateTimeInstance(styleDate, styleHeure)

Ces méthodes utilise la Locale par défaut mais


Nombre de jours entre deux dates chacune de ces méthodes possède une surcharge qui
permet de préciser une Locale.
Pour connaître le nombre de jours entre deux dates, on
procède de la manière suivante : Pour chacune de ces méthodes, quatre styles sont
utilisables : SHORT, MEDIUM, LONG et FULL. Ils
1) (date1.getTime() - date2.getTime()) / permettent de désigner la richesse des informations
(24*60*60*1000) contenues dans le modèle pour la date et/ou l'heure.

2) on passe par des calendriers pour supprimer les


heures, minutes , secondes et millisecondes :

Calendar cal1 = Calendar.getInstance();


Calendar cal2 = Calendar.getInstance();

cal1.setTime(date1);
cal2.setTime(date2); Exemple :
cal1.set(Calendar.HOUR_OF_DAY,0); package com.jmd.test.dej.date;
ENI 13
import java.text.DateFormat;
import java.util.Date; Résultat :
import java.util.Locale;
27/06/06 21:36
public class TestFormaterDate2 {
27 juin 2006 21:36:30
/**
27 juin 2006 21:36:30 CEST
* @param args
mardi 27 juin 2006 21 h 36 CEST
*/
public static void main(String[] args) {
6/27/06 9:36 PM
Date aujourdhui = new Date();
Jun 27, 2006 9:36:30 PM
DateFormat shortDateFormat =
June 27, 2006 9:36:30 PM CEST
DateFormat.getDateTimeInstance(
Tuesday, June 27, 2006 9:36:30 PM CEST
DateFormat.SHORT, DateFormat.SHORT);

DateFormat shortDateFormatEN = Il est aussi possible de définir son propre format en


DateFormat.getDateTimeInstance( utilisant les éléments du tableau ci-dessous. Chaque
DateFormat.SHORT, DateFormat.SHORT, new lettre du tableau est interprétée de façon particulière.
Locale("EN","en")); Pour utiliser les caractères sans qu'ils soient
interprétés dans le modèle il faut les encadrer par de
DateFormat mediumDateFormat = simples quotes. Pour utiliser une quote il faut en mettre
DateFormat.getDateTimeInstance( deux consécutives dans le modèle.
DateFormat.MEDIUM, DateFormat.MEDIUM);
Lettre Description Exemple
DateFormat mediumDateFormatEN =
DateFormat.getDateTimeInstance( AD (Anno Domini), BC
DateFormat.MEDIUM, G Era
(Before Christ)
DateFormat.MEDIUM, new Locale("EN","en"));
y Année 06 ; 2006
DateFormat longDateFormat =
DateFormat.getDateTimeInstance( M Mois dans l'année Septembre; Sept.; 07
DateFormat.LONG, DateFormat.LONG); w Semaine dans l'année 34
DateFormat longDateFormatEN = W Semaine dans le mois 2
DateFormat.getDateTimeInstance(
DateFormat.LONG, D Jour dans l'année 192
DateFormat.LONG, new Locale("EN","en"));
d jour dans le mois 23
DateFormat fullDateFormat = Jour de la semaine
DateFormat.getDateTimeInstance( F 17
dans le mois
DateFormat.FULL, DateFormat.FULL);
E Jour de la semaine Mercredi; Mer.
DateFormat fullDateFormatEN =
DateFormat.getDateTimeInstance( Marqueur AM/PM
a PM, AM
DateFormat.FULL, (Ante/Post Meridiem)
DateFormat.FULL, new Locale("EN","en"));
H Heure (0-23) 23
System.out.println(shortDateFormat.format(aujourdhu k Heure (1-24) 24
i));
System.out.println(mediumDateFormat.format(aujourdh Heure en AM/PM (0-
ui)); K 6
11)
System.out.println(longDateFormat.format(aujourdhui
)); Heure en AM/PM (1-
h 7
System.out.println(fullDateFormat.format(aujourdhui)) 12)
;
System.out.println(""); m Minutes 59
System.out.println(shortDateFormatEN.format(aujour s Secondes 59
dhui));
System.out.println(mediumDateFormatEN.format(aujo S Millisecondes 12564
urdhui));
System.out.println(longDateFormatEN.format(aujourd CEST; Heure d'été d'Europe
z Zone horaire générale
hui)); centrale
System.out.println(fullDateFormatEN.format(aujourdh
ui)); Zone horaire (RFC
Z +0200
} 822)

ENI 14
Ces caractères peuvent être répétés pour préciser le formater = new SimpleDateFormat("dd MMMMM yyyy
format à utiliser : GGG, hh:mm aaa");
System.out.println(formater.format(aujourdhui));
• Pour les caractères de type Text : moins de 4
caractères consécutifs représentent la version formater = new
abrégée sinon c'est la version longue qui est SimpleDateFormat("yyyyMMddHHmmss");
utilisée. System.out.println(formater.format(aujourdhui));
• Pour les caractères de type Number : c'est le
nombre de répétitions qui désigne le nombre }
de chiffre utilisé complété si nécessaire par
des 0 à gauche. }
• Pour les caractères de type Year : 2 caractères
Résultat :
précisent que l'année est codée sur deux
caractères. 27-06-06
• Pour les caractères de type Month : 3 270606
caractères ou plus représentent la forme 060627
littérale sinon c'est la forme numérique du 9:37 PM
mois. 9:37 PM, CEST
09:37 PM, Heure d'été d'Europe centrale
mardi, 27 juin 2006
Exemple : le 27/06/2006 à 09:37:10
le 27 juin 2006 à 09:37:10
package com.jmd.test.dej.date; 27 juin 2006 ap. J.-C., 09:37 PM
20060627213710
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale; Il existe plusieurs constructeurs de la classe
SimpleDateFormat :
public class TestFormaterDate {
Constructeur Rôle
public static void main(String[] args) {
SimpleDateFormat formater = null; Constructeur par défaut
utilisant le modèle par
Date aujourdhui = new Date(); SimpleDateFormat() défaut et les symboles de
formatage de dates de la
formater = new SimpleDateFormat("dd-MM-yy"); Locale par défaut
System.out.println(formater.format(aujourdhui));
Constructeur utilisant le
formater = new SimpleDateFormat("ddMMyy"); modèle fourni et les
System.out.println(formater.format(aujourdhui)); SimpleDateFormat(String) symboles de formatage
de dates de la Locale par
formater = new SimpleDateFormat("yyMMdd"); défaut
System.out.println(formater.format(aujourdhui));
Constructeur utilisant le
formater = new SimpleDateFormat("h:mm a"); SimpleDateFormat(String, modèle et les symboles
System.out.println(formater.format(aujourdhui)); DateFormatSymbols) de formatage de dates
fournis
formater = new SimpleDateFormat("K:mm a, z"); Constructeur utilisant le
System.out.println(formater.format(aujourdhui)); modèle fourni et les
SimpleDateFormat(String,
symboles de formatage
formater = new SimpleDateFormat("hh:mm a, zzzz"); Locale)
de dates de la Locale
System.out.println(formater.format(aujourdhui)); fournie
formater = new SimpleDateFormat("EEEE, d MMM
yyyy");
System.out.println(formater.format(aujourdhui)); 2.5. La classe Vector

formater = new SimpleDateFormat("'le' dd/MM/yyyy Un objet de la classe Vector peut être considéré
'à' hh:mm:ss"); comme une tableau évolué qui peut contenir un
System.out.println(formater.format(aujourdhui)); nombre indéterminé d'objets.
formater = new SimpleDateFormat("'le' dd MMMM
yyyy 'à' hh:mm:ss"); Les méthodes principales sont les suivantes :
System.out.println(formater.format(aujourdhui));
Méthode Rôle
ENI 15
Il est aussi possible de parcourir l'ensemble des
void
ajouter un objet dans le vecteur éléments en utilisant une instance de l'interface
addElement(Object)
Enumeration.
boolean retourne true si l'objet est dans le
contains(Object) vecteur L'interface Enumeration
Object elementAt(int) retourne l'objet à l'index indiqué
L'interface Enumeration est utilisée pour permettre le
retourne une énumeration parcours séquentiel de collections. Enumeration est
Enumeration elements() contenant tous les éléments du une interface qui définit 2 méthodes :
vecteur

retourne le premier élément du Méthodes Rôle


Object firstElement() vecteur (celui dont l'index est égal
à zéro) retourne true si l'énumération
Boolean
contient encore un ou plusieurs
hasMoreElements()
int indexOf(Object) renvoie le rang de l'élément ou -1 éléments
void retourne l'objet suivant de
insertElementAt(Object, insérer un objet à l'index indiqué l'énumération
int) Object nextElement() Elle lève une Exception
NoSuchElementException si la
retourne un booléen si le vecteur fin de la collection est atteinte.
boolean isEmpty()
est vide

retourne le dernier élément du Exemple 2:


Objet lastElement()
vecteur
import java.util.*;
void
vider le vecteur
removeAllElements()
public class AppVector{
void static int tot=0;
supprime l'objet du vecteur public static void main(String ergv[]){
removeElement(Object)
Vector v=new Vector();
void v.addElement(new Compte(100,1000));
supprime l'objet à l'index indiqué
removeElementAt(int) v.addElement(new Compte(101,2000));
v.addElement(new Compte(102,3000));
void Enumeration e=v.elements();
remplacer l'élément à l'index par
setElementAt(object, System.out.println("Enumeration");
l'objet
int) while (e.hasMoreElements()){
Compte c=(Compte)e.nextElement();
int size() nombre d'objet du vecteur
System.out.println(c.numCompte+" "+c.soldeInit);
}
System.out.println("ElementAt");
On peut stocker des objets de classes différentes dans for(int i=0;i<v.size();i++){
un vecteur mais les éléments stockés doivent Compte d=(Compte)v.elementAt(i);
obligatoirement être des objets (pour le type primitif il tot+=d.soldeInit;
faut utiliser les wrappers tel que Integer ou Float mais System.out.println(d.numCompte+" "+d.soldeInit);
pas int ou float). }
System.out.println("\nLa somme est de:\t"+tot);
}
Exemple: }

Vector v = new Vector();


v.addElement(new Integer(10));
v.addElement(new Float(3.1416));
v.insertElementAt("chaine ",1);
2.6. La classe Hashtable
System.out.println(" le vecteur contient "+v.size()+ "
elements "); Les informations d'une Hastable sont stockées sous la
String retrouve = (String) v.elementAt(1); forme clé - données. Cet objet peut être considéré
System.out.println(" le 1er element = "+retrouve); comme un dictionnaire.
Exemple :
C:\$user\java>java test9 Hashtable dico = new Hashtable();
le vecteur contient 3 elements dico.put("livre1", " titre du livre 1 ");
le 1er element = chaine dico.put("livre2", "titre du livre 2 ");

Il est possible d'utiliser n'importe quel objet comme clé


et comme donnée
ENI 16
Elle ressemble à Array par le fait qu’elle peut stocker
Exemple : une liste d’objets référencés par leur numéro d’index.
dico.put("jour", new Date()); La classe ArrayList est l’identique de la classe Vector,
dico.put(new Integer(1),"premier"); mais n’est pas synchronisée ; elle est donc plus rapide
dico.put(new Integer(2),"deuxième"); et à utiliser de préférence
Pour lire dans la table, on utilise get(object) en donnant
la clé en paramètre.
Différence entre Array - ArrayList
Exemple :
• Première différence :
System.out.println(" nous sommes le " Il ne faut pas fixer la taille d’un ArrayList. La taille
+dico.get("jour")); de celui-ci augmente/diminue automatiquement suivant
l’ajout/la suppression d’éléments.
La méthode remove(Object) permet de supprimer une Exemple :
entrée du dictionnaire correspondant à la clé passée int[] age = new int[20];
en paramètre. ArrayList age = new ArrayList();
La méthode size() permet de connaitre le nombre • Deuxième différence :
d'association du dictionnaire. Un Arraylist permet de stocker des objets de types
Exemple 1 : contenu d'un vecteur et liste des clés différents car il ne contient que la référence à l’objet et
d'une Hastable non l’objet lui-même.
import java.util.*;
!!! Toujours mettre une conversion de type avant
class test9 {
d’utiliser un élément d’un ArrayList, même s’il ne
public static void main (String args[]) { contient que des éléments du même type !!!
On peut cependant forcer ArrayList à ne contenir
Hashtable h = new Hashtable(); qu’un seul type d’objet comme la classe Array.
Vector v = new Vector();
Exemple : ArrayList<int> age =new ArrayList<int> ();
v.add("chaine 1");
v.add("chaine 2"); Pour importer la classe :
v.add("chaine 3"); import java.util.ArrayList;

h.put("jour", new Date()); • Pour déclarer un objet de type ArrayList :


h.put(new Integer(1),"premier"); ArrayList nom_objet = new ArrayList()
h.put(new Integer(2),"deuxième");
• Pour ajouter un élément ob à la fin de la liste :
System.out.println("Contenu du vector"); boolean reussi = nom_objet.add (ob);
• Pour ajouter un élément ob à la position p :
for (Enumeration e = v.elements() ; par ex : age.add (3, 24)
e.hasMoreElements() ; ) { • Pour supprimer tous les éléments de la liste :
System.out.println(e.nextElement()); nom_objet.clear ();
} • Pour supprimer l’élément obj de la position p et
le renvoie à la sortie :
System.out.println("\nContenu de la hashtable"); Objet obj = nom_objet.remove (p);
• Pour renvoyer à la sortie l’élément obj à la
for (Enumeration e = h.keys() ; position p de la liste :
e.hasMoreElements() ; ) { Objet obj = nom_objet.get (p);
System.out.println(e.nextElement()); exemple : int a = age.get(2);
}
• Pour trouver la position de l’objet ob dans la
}
liste :
}
Int p = nom_objet.indexOf (ob);
• Pour vérifier si la liste contient bien l’élément
C:\$user\java>java test9
ob :
Contenu du vector
boolean t = nom_objet.contains (ob);
chaine 1
chaine 2 • Pour vérifier si la liste est vide :
chaine 3 boolean t = nom_objet.isEmpty ();
Contenu de la hashtable • Pour connaître la taille de la liste :
jour Int l = nom_objet.size ();
2
1
public class Etudiant {
String nom ;
2.8. La classe ArrayList
Int bourse ;
double note ;
ENI 17
public Etudiant( String nom) Cette classe facilite la lecture dans un
{ this.nom =nom ; } flux. Elle est particulièrement utile pour
réaliser une lecture de données à partir
public void AttibuerBourse(int bourse) du clavier dans une application de type
{this.bourse=bourse ; } console.
public void DonnerNote(double note)
{this.note=note; }
public String getNom(){ return nom ; } La méthode next() bloque l'exécution jusqu'à la lecture
public double getNote() { return note; } de données et les renvoie sous la forme d'une chaîne
public int getBourse() { return bourse; } de caractères. Cette classe possède plusieurs
} méthodes nextXXX() ou XXX représente un type
primitif. Ces méthodes bloquent l'exécution jusqu'à la
lecture de données et tente de les convertir dans le
type XXX. Une exception de type
Une collection d’Etudiants InputMismatchException est levée si les données lue
dans le flux ne sont pas du type requis.
import java.util.ArrayList;

public class CollectionDeEtudiants{ Saisir des données envoyées par le clavier


private ArrayList liste;
Première méthode : utiliser un Bufferedreader
public CollectionDeEtudiants(){
liste = new ArrayList(); On utilise deux classes de java.io, la classe
} InputStreamReader et la classe BufferedReader.

public void ajouter(Etudiant v){ Exemple :


liste.add(v);
} import java.io.BufferedReader;
import java.io.InputStreamReader;
public int nombreDeEtudiants(){ import java.io.IOException;
return liste.size(); import java.util.StringTokenizer;
}

public void Creer_Liste_Etudiants () // main class SaisieClavier


{CollectionDeEtudiants maCollection = new {
CollectionDeEtudiants(); public static void main (String[] argv) throws
Etudiant v = new Etudiant("rabe"); IOException, NumberFormatException
v.AttribuerBourse(1000); {
v.DonnerNote(18); int somme = 0;
maCollection.ajouter(v); String ligne;
Etudiant v = new Etudiant("koto"); StringTokenizer st;
v.AttribuerBourse(2000); BufferedReader entree = new BufferedReader
v.DonnerNote(15); (new InputStreamReader(System.in));
maCollection.ajouter(v);
maCollection.afficherTousLesEtudiants(); ligne = entree.readLine();
} while(ligne.length() > 0)
{
// Itération : while st = new StringTokenizer(ligne);
public void afficherTousLesEtudiants(){ while(st.hasMoreTokens())
int index = 0; somme += Integer.parseInt(st.nextToken());
while( index < nombreDeVehicules()){ ligne = entree.readLine();
System.out.println(liste.get(index)); }
index++; System.out.println("La somme vaut : "+somme);
} }
// Itération : Iterator }
public void afficherTousLesEtudiants(){ Voici une execution :
Iterator it = liste.iterator(); $ java SaisieClavier
while( it.hasNext()){ 31
System.out.println( (Etudiant) it.next()); 2
} Appuyer sur Return pour sortir
} La somme vaut : 6

Deuxième méthode : utiliser un Scanner

4. La classe Scanner
ENI 18
Depuis le JDK 5.0 , la saisie à partir de la fenêtre 1) créer un fichier texte MANIFEST.MF contenant la
d'exécution est plus simple. La classe classe à exécuter et les archives à mettre dans le
java.util.Scanner, qui possède différents constructeurs classpath :
dont un de type InputStream que nous utilisons dans Manifest-Version : 1.0
notre exemple, permet de saisir différents types de Created-By : 1.4. (Sun Microsystems)
données. Main-Class : classemain
Class-Path : archive1.jar archive2.jar
Exemple 1 : Saisie sur clavier
Attention: il est nécessaire de terminer le fichier
import java.util.Scanner; manifest par un saut de ligne
public class SaisieClavier { 2) créer un fichier jar comme suit
public static void main(String[] args) { jar cvfm monappli.jar MANIFEST.MF . (*.class)
Scanner sc = new Scanner(System.in);
String s = ""; Pour l’exécuter , utiliser java –jar monappli.jar ou
while(s.compareTo("ok")!=0){ cliquer sur le fichier jar.
s = sc.nextLine(); Sous Linux, chmod +x monappli.jar et puis
System.out.println("Chaine="+s); ./monappli.jar
}
} Comment récupérer des paramètres d'une ligne de
} commande ?

Exemple 2 : Saisie sur clavier Cela se fait de la même manière que dans la plupart
des langages comme C/C++, C-Shell, Bash, ...
class SaisieClavier {
public static void main (String[] arg) { Lors de l'appel du programme :
java.util.Scanner entree = new java MaClasse param1 param2 ... paramN
java.util.Scanner(System.in); Les paramètres sont stockés dans un tableau de
System.out.println("Donnez votre prénom et votre chaines de caractères qui se trouve dans la méthode
nom"); main de la classe principale :
String prenom = entree.next();
String nom = entree.next(); public static void main (String[] args) { ... }
On peut ainsi accéder aux éléments rentrés en
System.out.println("Donnez votre âge");
paramètres via le tableau "args", par exemple :
int age = entree.nextInt();
entree.nextLine();
/ / nombre de paramètres
System.out.println("Ecrire votre phrase");
String phrase = entree.nextLine(); int nbParam = args.length;
System.out.println("Marie (true,false)"); for (int i = 0; i < nbParam; i++) {
boolean marie = entree.nextBoolean(); System.out.println(args[i]);
System.out.println("Donner votre noute"); }
double note = entree.nextDouble();
System.out.println(prenom + " " + nom + ", " + age + "
ans, dit : " + phrase+ " Marié:"+marie+ " Note= "+note); Attention : une exception est levée si l'on tente
} d'accéder à un élément du tableau qui n'existe pas.
}
Comment afficher les caractères spéciaux

Voici une execution : import java.io.PrintStream;


Donnez votre prénom et votre nom public class Ex {
Lou public static void main(String [] argv) {
Charon try{
Donnez votre âge System.setOut(new PrintStream(System.out, true,
12
"Cp850"));
System.out.println(" à la vérité ");
Comment créer un jar exécutable ?
}catch (Exception e) {}
}
Pour créer un jar exécutable :

ENI 19

Vous aimerez peut-être aussi