Вы находитесь на странице: 1из 34

TP Java Avancé

Exercice 1 (IO)

Écrire une application ligne de commande qui simule la commande “cp” ou “copy” en utilisant les
classes FileOutputStream et FileInputStream

Attention a la gestion des exceptions et aux données entrées sur la ligne de commande. Cette
application ne copiera qu’un seul fichier à la fois.

Syntaxe : java cpSimul /source/nomfichieracopier.ext /destination/nouveaunom.ext

Correction :

package cpsimul;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CpSimul {

FileInputStream fis;
FileOutputStream fos;
long deb, duree;

CpSimul(String source, String destination){

deb=System.nanoTime();
try{
fis=new FileInputStream(source);
}
catch(IOException ioe){
System.out.println("Ficier source inexistant");
System.exit(200);
}

try {
fos=new FileOutputStream(destination);

while(fis.available()>0){
fos.write(fis.read());
}

} catch(IOException ioe){
System.out.println("Imposible de creer le fichier destination");
System.exit(150);
}
duree=System.nanoTime()-deb;
System.out.println("Durée de la copie en nanosecondes : "+ duree);

public static void main(String[] args) {


if (args.length<2){

1/34
System.out.println("Pas assez de parametres...\nsyntaxe cpSimul source destination");
System.exit(250);
}
new CpSimul(args[0], args[1]);
}
}

Exercice 2(IO)

Quels classes peut on utiliser pour améliorer les applications ci dessus (gain de temps à la copie)
=>Modifier les applications précédentes pour tester ces classes.
Correction :

while(fis.available()>0){
fos.write(fis.read());
}

Remplacer dans l'exercice précédent les lignes suivantes par :

int octet=0, taille=4096;


byte[] b;
b=new byte[taille];
while (fis.available()>0){
octet=fis.read(b);
fos.write(b);
}

Exercice 3 (IO - File)

Ecrire une petite application Java permettant de simuler la commande « ls » ou « dir », cette
application permet de donner en entête le chemin du repertoire complet, puis la liste des fichiers
contenu dans ce repertoire.
Si ce repertoire contient des sous repertoires, il faut explorer de maniere recursive ces sous
repertoires.
Afficher pour chaque repertoire et fichier le type <REP> pour repertoire et <FICH> pour les
fichiers ainsi que les modes d'acces permis 'r' si accessible en lecture, 'w' si accessible en ecriture, 'h'
si c'est un fichier cache.

Attention aux exceptions, et aux arguments de la ligne de commande.

Exemple d'affichage :
F:\universite\Tp java\httpd\www <REP> rw-
..\httpd\www\bidon.htm <FICH> rw-
..\httpd\www\tp1.htm <FICH> rw-
..\httpd\www\tp2.htm <FICH> rw-
..\httpd\iconsMimetype <FICH> rw-
..\httpd\HttpConnection.class <FICH> rw-
..\httpd\HttpLog.class <FICH> rw-
..\httpd\Httpd.class <FICH> rw-
..\httpd\Main.class <FICH> rw-

2/34
Correction :

package lssimul;

import java.io.File;

public class LsSimul {

File f;
File [] fl;
int nbrep=0, nbfic=0;

public LsSimul(String chemin) {


try{
//liste des elemnts du repertoire
f=new File(chemin);
fl=f.listFiles();

//pour chaque elements, afficher les attributs

for (int i=0;i<fl.length;i++){


System.out.println(nomfichier(fl[i])+" "+typefichier(fl[i])+" "+attributfichier(fl[i])+ " "+fl[i].length()+" octets");
}
System.out.println("\n"+nbfic+" fichier(s)");
System.out.println(nbrep+" repertoire(s)");

}catch(Exception ioe){
System.out.println("Chemin incorrect...");
System.exit(100);
}
}

public String nomfichier(File fi){


return fi.getAbsolutePath();
}

public String typefichier(File fi){


String typef="-";
if (fi.isDirectory()==true) {typef="<REP>";nbrep++;}
if (fi.isFile()==true) {typef="<FIC>";nbfic++;}
return typef;
}

public String attributfichier(File fi){


String att="";
if (fi.canRead()) {att=att+"r";} else {att=att+"-";}
if (fi.canWrite()) {att=att+"w";} else {att=att+"-";}
if (fi.canExecute()) {att=att+"x";} else {att=att+"-";}
if (fi.isHidden()) {att=att+"h";} else {att=att+"-";}
return att;
}

public static void main(String[] args) {


if (args.length<1){
System.out.println("pas assez de parametres\nsyntaxe : lsSimul path");
System.exit(200);
}
new LsSimul(args[0]);
}

3/34
}

Exercice 4 (IO - Swing)

Ecrire la même application que l'exercice 1, mais avec une interface graphique en Java Swing du
type ci dessous...

Correction :

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class CpSimulGUI extends JFrame implements ActionListener {

JLabel lbl1;
JLabel lbl2;
JTextField tfSource;
JTextField tfDestination;
JButton btnopen;
JButton btncopier;
JLabel lbfin;
FileInputStream fis;
FileOutputStream fos;
JFileChooser jfc;

CpSimulGUI(){
setBounds(100,100,450,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setTitle("CpSimulGUI");
init_compo();

setResizable(false);
setVisible(true);
}

4/34
public void init_compo(){
lbl1=new JLabel("Source");
lbl1.setBounds(20, 10, 100, 25);
add(lbl1);

lbl2=new JLabel("Destination");
lbl2.setBounds(20, 40, 100, 25);
add(lbl2);

tfSource=new JTextField("c:/source");
tfSource.setBounds(120, 10, 250, 25);
add(tfSource);

tfDestination=new JTextField("c:/dest");
tfDestination.setBounds(120, 40, 250, 25);
add(tfDestination);

btnopen=new JButton("...");
btnopen.setBounds(370, 10,50, 25);
btnopen.setActionCommand("OPEN");
btnopen.addActionListener(this);
add(btnopen);

btncopier=new JButton("Copier");
btncopier.setBounds(20, 80,80, 25);
btncopier.setActionCommand("COPIER");
btncopier.addActionListener(this);
add(btncopier);

lbfin=new JLabel();
lbfin.setBounds(120, 80, 100, 25);
add(lbfin);
}

public void copier(String source, String destination){


try{
fis=new FileInputStream(source);
}
catch(IOException ioe){
System.out.println("Ficier source inexistant");
System.exit(200);
}
try {

fos=new FileOutputStream(destination);
lbfin.setText("Début de la copie");
while(fis.available()>0){
fos.write(fis.read());
}
fos.close();
fis.close();
lbfin.setText("Copie Terminée");
} catch(IOException ioe){
System.out.println("Imposible de creer le fichier destination");
System.exit(150);
}
}

5/34
public void ouvrir(){
jfc=new JFileChooser();
int reponse=jfc.showOpenDialog(this);
if (reponse==JFileChooser.APPROVE_OPTION){
tfSource.setText(jfc.getSelectedFile().getAbsolutePath());
tfDestination.setText(jfc.getSelectedFile().getAbsolutePath().replaceFirst(jfc.getSelectedFile().getName(), ""));
}
}

public static void main(String[] args) {


new CpSimulGUI();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().compareToIgnoreCase("COPIER")==0){
copier(tfSource.getText(), tfDestination.getText());
}

if (e.getActionCommand().compareToIgnoreCase("OPEN")==0){
ouvrir();
}

}
}

Exercice 5 (Socket - IO)


Ecrire une application Serveur Java qui permet de recevoir des requêtes http provenant d’une application
du type internet explorer, FireFox, Chrome etc, sur le port 80.
Vous ferez en sorte que votre serveur affiche ces requêtes sur l’écran, mais également les écrivent dans
un fichier de trace au format texte ASCII.

Exemple d'envoie de requête http par un client


GET /java/prog/page_test.html HTTP/1.1
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.1; Linux; fr)
Referer: http://www.monsite.fr/java/prog/
Pragma: no-cache
Cache-control: no-cache
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate, identity
Accept-Charset: iso-8859-1, utf-8;q=0.5, *;q=0.5
Accept-Language: fr, en
Host: www.monsite.fr

package httpweb;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

6/34
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
* classe qui construit le serveur HTTP en ecoute sur le port 80
*/
public class HttpWeb {

ServerSocket ss;
Socket s;
Thread t;

public HttpWeb() {
try{
ss=new ServerSocket(80); //serveur ecoute sur port 80
System.out.println("Demarrage du serveur HTTP");
while(true){ //boucle infini
s=ss.accept(); //en attente d'un client browser internet
System.out.println("Connection "+s.getInetAddress().getHostName()+" du client au serveur");
new gesSock(s).start(); //creer la communication avec le client
}
}catch(IOException ioe){
ioe.printStackTrace();
}
}

public static void main(String[] args) {


new HttpWeb();
}
} //fin de la classe HttpWeb

/**
* classe de gestion des sockets clients en multiThread
*/
class gesSock extends Thread{
BufferedReader br; //flux lecture depuis client
PrintWriter pr; //flux ecriture vers client
Socket sl; //declaration de la socket client en global
String defautPath="c:/perso/www"; //chemin de mes pages html

/**
* Constructeur
* @param s
*/
public gesSock(Socket s) {this.sl=s;}

/**
* Methode run surchagée
*/

@Override
public void run() {
try {
//instanciation des communicatons entre client et serveur
br=new BufferedReader( new InputStreamReader( sl.getInputStream()));
pr=new PrintWriter(sl.getOutputStream());

//lire la premiere ligne de la requete HTTP


String ligne="";

7/34
if (br.ready()) {ligne=br.readLine();}
System.out.println(ligne);
//lire les lignes suivantes de la requete HTTP
while (br.ready()){System.out.println(br.readLine());}

//si la requete est de type GET alors repondre au client


if (isGet(ligne)) {reponse(pr,www(ligne));}

} catch (IOException ex) {


Logger.getLogger(gesSock.class.getName()).log(Level.SEVERE, null, ex);
}
}

/**
* Tester si la requete est du type GET
* @param l
* @return
*/
public boolean isGet(String l){
Scanner sc=new Scanner(l);
sc.useDelimiter(" ");
if (sc.next().compareToIgnoreCase("GET")==0){ return true;} else {return false;}
}

/**
* Construitre le chemin du fichier reponse
* @param l
* @return
*/
public String www(String l){
Scanner sc=new Scanner(l);
sc.useDelimiter(" ");
sc.next();
return defautPath+sc.next();
}

/**
* Reponse du serveur vers le client
* @param out
* @param l
*/
public void reponse(PrintWriter out,String l){
out.println("HTTP/1.1 200 OK"); //protocole + Valeur de reussite
out.println("Server: Java HTTP Server 1.0");//se presenter
out.println("Date: " + new Date());//date de la réponse
out.println("Content-type: text/html"); //type mime du fichier de reponse
//out.println("Content-length: " + file.length());
out.println(); //ligne blanche entre l'entête et le contenu
out.flush(); //flush stream
out.println(ouvrir(l)); //contenu du fichier reponse
//out.println("<HTML><BODY>HELLO WORLD!</BODY></HTML>");
out.close();
}

/**
* Ouvre le fichier html demandé sur le disque
* et construit la chaine de reponse
* @param l
* @return
*/

8/34
public String ouvrir(String l){
String reponse="";
try{
BufferedReader bfr=new BufferedReader(new FileReader(l));
while (bfr.ready()){
reponse=reponse+bfr.readLine();
}
bfr.close();
}catch (IOException ioe){ioe.printStackTrace();}
return reponse;
}

} //fin de la classe

Exercice 6 (sujet du TP maison) (IO – File - Swing)

Ecrire le même exercice que le numero 3, mais en mode graphique basé sur Swing en utilisant un
BorderLayout.

Exercice 7 (Swing, Thread – MouseMotionListener - ActionListener)

Soit le code ci dessous, modifier celui ci pour qu'il permette la rotation du carré de maniére fluide
en utilisant une Thread, et permettre par une manœuvre de Drag&Drop le déplacement du carre en
rotation.
Nb : 1 degrés = 0,0174532925 radian

On y ajoutera également un menu simple permettant l'arret « STOP » et le demarrage « START » de


la rotation du carre.

import java.awt.BorderLayout;
import java.awt.Color;

9/34
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class SquareRot extends JFrame {

Vue vue;

public SquareRot() {
setBounds(100, 100, 250, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
vue=new Vue();
getContentPane().add(vue,BorderLayout.CENTER);
setResizable(false) ;
setVisible(true);

public static void main(String[] args) {


new SquareRot();
}
}

class Vue extends JPanel{

int cx,cy,r,x,y,x1,y1,x2,y2,x3,y3;
double rot=0.0;
int X=100, Y=100 ;

Vue() {
carre(X,Y,50,rot);
repaint();
}

@Override
public void paintComponent(Graphics g){
g.setColor(Color.lightGray);
g.fillRect(0,0,250,250) ;
g.setColor(Color.black);
g.drawLine(x, y, x1, y1);
g.drawLine(x1, y1, x2, y2);
g.drawLine(x2, y2, x3, y3);
g.drawLine(x3, y3, x, y);
}

public void carre(int cex, int cey, int ray,double a){


cx=cex;
cy=cey;
r=ray;
x=(int)(r*Math.cos(a)+cx);
y=(int)(r*Math.sin(a)+cy);
x1=(int)(r*Math.cos(a+Math.PI/2)+cx);
y1=(int)(r*Math.sin(a+Math.PI/2)+cy);
x2=(int)(r*Math.cos(a+Math.PI)+cx);
y2=(int)(r*Math.sin(a+Math.PI)+cy);
x3=(int)(r*Math.cos(a+Math.PI*1.5)+cx);
y3=(int)(r*Math.sin(a+Math.PI*1.5)+cy);
System.out.println("passe ici");

10/34
}

Correction :

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

public class SquareRot extends JFrame implements ActionListener {


Vue vue;
JMenuItem mnStart,mnStop;

public SquareRot() {
setBounds(100, 100, 250, 250);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JMenuBar menu=new JMenuBar();
JMenu mnPlay=new JMenu("play");
mnStart=new JMenuItem("Start");
mnStart.setActionCommand("START");
mnStart.setEnabled(false);
mnStart.addActionListener(this);
mnStop=new JMenuItem("Stop");
mnStop.setActionCommand("STOP");
mnStop.addActionListener(this);
mnPlay.add(mnStart);
mnPlay.add(mnStop);

11/34
menu.add(mnPlay);
setJMenuBar(menu);
vue=new Vue();
getContentPane().add (vue,BorderLayout.CENTER);
setResizable(false);
setVisible(true);
}

public static void main(String[] args) {new SquareRot();}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().compareTo("STOP")==0)
{vue.stopper();mnStop.setEnabled(false);mnStart.setEnabled(true);}
if (e.getActionCommand().compareTo("START")==0)
{vue.demarrer();mnStop.setEnabled(true);mnStart.setEnabled(false);}
}

class Vue extends JPanel implements Runnable, MouseMotionListener{

Thread t;
int cx,cy,r,x,y,x1,y1,x2,y2,x3,y3;
double rot=0.0;
int X=100,Y=100;
boolean tourne=true;

Vue() {
carre(X,Y,50,rot);
repaint();
addMouseMotionListener(this);
t=new Thread(this);
t.start();
}

@Override
public void run() {
while (! t.isInterrupted()){
try {
Thread.sleep(10);
if (tourne) rot=rot+0.0174532925;
carre(X,Y,50,rot);
repaint();
} catch (InterruptedException ex) {
Logger.getLogger(Vue.class.getName()).log(Level.SEVERE, null, ex);
}

public void stopper(){


tourne=false;
}

12/34
public void demarrer(){
tourne=true;
}

@Override
public void paintComponent(Graphics g){
g.setColor(Color.lightGray);
g.fillRect(0, 0, 250, 250);
g.setColor(Color.black);
g.drawLine(x, y, x1, y1);
g.drawLine(x1, y1, x2, y2);
g.drawLine(x2, y2, x3, y3);
g.drawLine(x3, y3, x, y);
}

public void carre(int cex, int cey, int ray,double a){


cx=cex;
cy=cey;
r=ray;
x=(int)(r*Math.cos(a)+cx);
y=(int)(r*Math.sin(a)+cy);
x1=(int)(r*Math.cos(a+Math.PI/2)+cx);
y1=(int)(r*Math.sin(a+Math.PI/2)+cy);
x2=(int)(r*Math.cos(a+Math.PI)+cx);
y2=(int)(r*Math.sin(a+Math.PI)+cy);
x3=(int)(r*Math.cos(a+Math.PI*1.5)+cx);
y3=(int)(r*Math.sin(a+Math.PI*1.5)+cy);
}

@Override
public void mouseDragged(MouseEvent e) {
X=e.getX();
Y=e.getY();
}

@Override
public void mouseMoved(MouseEvent e) {}

Exercice 8 (Socket – client/serveur)

Ecrire une application « serveur » Java qui permet de donner l'heure courante a un client qui se
connecte sur celui ci sur le port 1234, le client doit envoyer le message « HEURE » pour obtenir
une réponse du serveur, tout autres messages aura pour réponse de la part du serveur « Question
invalide... ».

Vous pouvez ecrire la version du client en mode graphique SWING.

Correction :

import java.net.*;
import java.io.*;
import java.util.*;

public class ServeurH {

ServerSocket ss;

13/34
Socket s;

public ServeurH(){
System.out.println ("Demmarage du serveur...");
try {
ss=new ServerSocket(1234);
while(true)
{
s=ss.accept();

new Connexion (s);


//this.start();

}
}
catch(Exception e){System.out.println("Erreur ServeurH");e.printStackTrace();}
}

public static void main(String[] args) {


ServeurH sh=new ServeurH();
}

}//fin de la classe principale

class Connexion extends Thread{

Socket s;
DataOutputStream byteOutput;
BufferedReader byteInput;

public Connexion(Socket s){


this.s=s;
this.start();
}

public void run(){


//boucle de communication
System.out.println ("Connection avec un client en cours...");

try {
byteOutput = new DataOutputStream(s.getOutputStream());
byteInput=new BufferedReader(new InputStreamReader(s.getInputStream()));

}
catch (IOException e1){System.out.println("Erreur IO Connexion");e1.printStackTrace();}

String entree;

try {
entree=byteInput.readLine();
if (entree.compareToIgnoreCase("HEURE")==0)
{
Calendar c=Calendar.getInstance();
int heure=c.get(Calendar.HOUR);
int minute=c.get(Calendar.MINUTE);
int seconde=c.get(Calendar.SECOND);

14/34
byteOutput.writeChars("Il est : "+heure+":"+minute+":"+seconde);
System.out.println ("Il est : "+heure+":"+minute+":"+seconde);
}

}catch(Exception e){}
}
}

Correction client mode console :

package clienth;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ClientH {


Socket s;
BufferedReader in;
PrintWriter out;
String message;

ClientH(){
try {
System.out.print("commande ? ");
Scanner sc=new Scanner(System.in);
message=sc.next();
s=new Socket("127.0.0.1", 1234);
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
out=new PrintWriter(s.getOutputStream());

out.println(message);

while (in.ready()){
System.out.println(in.readLine());
}

} catch (IOException ex) {


Logger.getLogger(ClientH.class.getName()).log(Level.SEVERE, null, ex);
}
}

public static void main(String[] args) {


new ClientH();
}

Exercice 9 (RMI – Client/serveur)

Ecrire la même application en utilisant la technologie Java RMI.

Correction INTERFACE :

15/34
package rmih;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RmiHeureInt extends Remote {

public int getHeure () throws RemoteException;


public int getMinute ()throws RemoteException;
public int getSeconde ()throws RemoteException;
public String getFormatHeure ()throws RemoteException;

Correction classe implémentation :

package rmih;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;

public class RmiHeureImpl extends UnicastRemoteObject implements RmiHeureInt {

Calendar c;

public RmiHeureImpl ()
throws RemoteException {
super ();

public int getHeure()


throws RemoteException { c=Calendar.getInstance();
return c.get(Calendar.HOUR);
}

public int getMinute()


throws RemoteException { c=Calendar.getInstance();
return c.get(Calendar.MINUTE);
}

public int getSeconde()


throws RemoteException { c=Calendar.getInstance();
return c.get(Calendar.SECOND);
}

public String getFormatHeure()


throws RemoteException { c=Calendar.getInstance();
return c.get(Calendar.HOUR)+":"+c.get(Calendar.MINUTE)+":"+c.get(Calendar.SECOND);
}

Correction classe serveur RMI :

package rmih;

16/34
import java.rmi.Naming;

public class RmiH{

RmiH(){
try {
java.rmi.registry.LocateRegistry.createRegistry(1099);

RmiHeureImpl obj = new RmiHeureImpl();//creer l'objet serveur rmi

Naming.bind ("rmi://"+java.net.InetAddress.getLocalHost().getHostName()+"/RmiHeure", obj);//enregistrer


dans rmi serveur

System.out.println ("rmi://"+java.net.InetAddress.getLocalHost().getHostName()+"/RmiHeure"+" enregistre");


} catch (Exception e) {
System.out.println ("RmiHeureServeur err specifique : "+e);
}
}

public static void main (String args[]) {new RmiH();}


}

Correction client RMI :

package rmih;

import java.rmi.*;
import java.io.*;

public class Client {


boolean quitter=false;
BufferedReader bf;
String addr;

Client (){
try{
bf=new BufferedReader(new InputStreamReader(System.in));
addr="rmi://"+java.net.InetAddress.getLocalHost().getHostName()+"/RmiHeure";
menu();
}catch(Exception e){e.printStackTrace();}
}

void menu(){

while(quitter==false)
{
String ligne;
int choix;

//afficher le menu
System.out.println(" ");
System.out.println("1 Les heures");
System.out.println("2 Les minutes");
System.out.println("3 Les secondes");
System.out.println("4 Heure complete");
System.out.println("5 Quitter");

try{

17/34
System.out.print("Votre choix ? ");ligne=bf.readLine();
System.out.println();

try {choix=Integer.parseInt(ligne);} catch (Exception e) {choix=0;}

switch(choix)
{
case 1:
{Remote r = Naming.lookup(addr);
if (r instanceof RmiHeureInt) {
int h = ((RmiHeureInt) r).getHeure();
System.out.println("Heure : " + h);}
break;}
case 2:
{Remote r = Naming.lookup(addr);
if (r instanceof RmiHeureInt) {
int m = ((RmiHeureInt) r).getMinute();
System.out.println("Minute : " + m);}
break;}
case 3:
{Remote r = Naming.lookup(addr);
if (r instanceof RmiHeureInt) {
int s = ((RmiHeureInt) r).getSeconde();
System.out.println("Seconde : " + s);}
break;}
case 4:
{Remote r = Naming.lookup(addr);
if (r instanceof RmiHeureInt) {
String s = ((RmiHeureInt) r).getFormatHeure();
System.out.println("Il est : " + s);}
break;}
case 5: System.out.println("Bye!");System.exit(0);break;
default: System.out.println ("Erreur de choix...");
}//fin du swirch

} catch (Exception e) {e.printStackTrace();}

}//fin du while

public static void main(String[] args) {


new Client();
}

Exercice 10 (Swing – GridBagLayout - ChangeListener)

L'équation de Drake est une célèbre proposition mathématique concernant les sciences telles que
l'exobiologie, la futurobiologie, l'astrosociologie, ainsi que le projet SETI (search for extraterrestrial
intelligence).

18/34
Cette équation a été suggérée par Frank Drake en 1961 afin de tenter d'estimer le nombre potentiel
de civilisations extraterrestres dans notre galaxie avec qui nous pourrions entrer en contact. Le
principal objet de cette équation pour les scientifiques est de déterminer ses facteurs, afin de
connaître le nombre probable de ces civilisations.

où :

• N est le nombre de civilisations extraterrestres dans notre galaxie avec lesquelles nous
pourrions entrer en contact,

et :

• R* est le nombre d'étoiles en formation par an dans notre galaxie,

• fp est la fraction de ces étoiles possédant des planètes,

• ne est le nombre moyen de planètes par étoile potentiellement propices à la vie,

• fl est la fraction de ces planètes sur lesquelles la vie apparaît effectivement,

• fi est la fraction de ces planètes sur lesquelles apparaît une vie intelligente,

• fc est la fraction de ces planètes capables et désireuses de communiquer,

• L est la durée de vie moyenne d'une civilisation.

Exemple de ca lcul avec les paramètres de Drake :

R* = 10/an, fp = 0,5, ne = 2, fl = 1, fi = fc = 0,01, et L = 50 années

N = 10 * 0,5 * 2 * 1 * 0,01 * 0,01 * 50 = 0,05

Nous pouvons donner des résultats plus optimistes, en considérant que 10% des civilisations
deviennent capables de communiquer, et qu'elles étendent leur longévité jusqu'à 100 000 années, en
considérant la vie de leur système planétaire (ce qui est très court à l'échelle géologique) :

R* = 20/an, fp = 0,1, ne = 0,5, fl = 1, fi = 0,5, fc = 0,1, et L = 100 000 années


N = 20 * 0,1 * 0,5 * 1 * 0,5 * 0,1 * 100 000 = 5000

Ecrire une application Java Swing qui permet de jouer sur les paramètres pour calculer le
résultat de cette équation, vous utiliserez le gridBagLayout et les Jslider pour cela.

Correction :

19/34
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Drake extends JFrame implements ChangeListener {

JSlider jl1,jl2,jl3,jl4,jl5,jl6,jl7;
JLabel vjl1,vjl2,vjl3,vjl4,vjl5,vjl6,vjl7;
JTextField resultat;

Drake(){
GridBagLayout gridbag=new GridBagLayout();
setLayout(gridbag);
GridBagConstraints gb=new GridBagConstraints();

gb.gridx=3;gb.gridy=0;gb.gridwidth=4;gb.gridheight=1;
JLabel formule=new JLabel("N=(R*)*fp*ne*fl*fi*fc*L");
formule.setFont(new Font("Times New Roman", Font.BOLD, 25));
add(formule,gb);

gb.gridx=0;gb.gridy=1;gb.gridwidth=2;
add(new JLabel("R*"),gb);
jl1=new JSlider(0, 1000, 20);
jl1.addChangeListener(this);
jl1.setToolTipText("R* est le nombre d'étoiles en formation par an dans notre galaxie");

20/34
gb.gridy=1;gb.gridx=2;gb.gridwidth=3;
add (jl1,gb);
gb.gridx=5;gb.gridy=1;
vjl1=new JLabel(""+jl1.getValue());
add(vjl1,gb);

gb.gridx=0;gb.gridy=2;gb.gridwidth=2;gb.gridheight=1;
add(new JLabel("fp"),gb);
jl2=new JSlider(0, 100, 10);
jl2.addChangeListener(this);
jl2.setToolTipText("fp est la fraction de ces étoiles possédant des planètes");
gb.gridy=2;gb.gridx=2;gb.gridwidth=3;
add (jl2,gb);
gb.gridx=5;gb.gridy=2;
vjl2=new JLabel(""+((double)jl2.getValue()/100));
add(vjl2,gb);

gb.gridx=0;gb.gridy=3;gb.gridwidth=2;gb.gridheight=1;
add(new JLabel("ne"),gb);
jl3=new JSlider(0, 20,1);
jl3.addChangeListener(this);
jl3.setToolTipText("ne est le nombre moyen de planètes par étoile potentiellement propices à la vie");
gb.gridy=3;gb.gridx=2;gb.gridwidth=3;
add (jl3,gb);
gb.gridx=5;gb.gridy=3;
vjl3=new JLabel(""+jl3.getValue());
add(vjl3,gb);

gb.gridx=0;gb.gridy=4;gb.gridwidth=2;gb.gridheight=1;
add(new JLabel("fl"),gb);
jl4=new JSlider(0, 100,50);
jl4.addChangeListener(this);
jl4.setToolTipText("fl est la fraction de ces planètes sur lesquelles la vie apparaît effectivement");
gb.gridy=4;gb.gridx=2;gb.gridwidth=3;
add (jl4,gb);
gb.gridx=5;gb.gridy=4;
vjl4=new JLabel(""+((double)jl4.getValue()/100));
add(vjl4,gb);

gb.gridx=0;gb.gridy=5;gb.gridwidth=2;gb.gridheight=1;
add(new JLabel("fi"),gb);
jl5=new JSlider(0, 100,50);

21/34
jl5.addChangeListener(this);
jl5.setToolTipText("fi est la fraction de ces planètes sur lesquelles apparaît une vie intelligente");
gb.gridy=5;gb.gridx=2;gb.gridwidth=3;
add (jl5,gb);
gb.gridx=5;gb.gridy=5;
vjl5=new JLabel(""+((double)jl5.getValue()/100));
add(vjl5,gb);

gb.gridx=0;gb.gridy=6;gb.gridwidth=2;gb.gridheight=1;
add(new JLabel("fc"),gb);
jl6=new JSlider(0, 100,10);
jl6.addChangeListener(this);
jl6.setToolTipText("fc est la fraction de ces planètes capables et désireuses de communiquer");
gb.gridy=6;gb.gridx=2;gb.gridwidth=3;
add (jl6,gb);
gb.gridx=5;gb.gridy=6;
vjl6=new JLabel(""+((double)jl6.getValue()/100));
add(vjl6,gb);

gb.gridx=0;gb.gridy=7;gb.gridwidth=2;gb.gridheight=1;
add(new JLabel("L"),gb);
jl7=new JSlider(0, 9000000,100000);
jl7.addChangeListener(this);
jl7.setToolTipText("L est la durée de vie moyenne d'une civilisation");
gb.gridy=7;gb.gridx=2;gb.gridwidth=3;
add (jl7,gb);
gb.gridx=5;gb.gridy=7;
vjl7=new JLabel(""+jl7.getValue());
add(vjl7,gb);

gb.gridy=8;gb.gridx=1;gb.gridwidth=1;
JLabel jln=new Jlabel("N=");
jln.setFont(new Font("Times New Roman", Font.BOLD, 25));
jln.setToolTipText("N est le nombre de civilisations extraterrestres dans notre galaxie avec lesquelles nous
pourrions entrer en contact");
add (jln,gb);

resultat=new JTextField(calculer());
resultat.setPreferredSize(new Dimension(100, 25));
resultat.setToolTipText("N est le nombre de civilisations extraterrestres dans notre galaxie avec lesquelles nous
pourrions entrer en contact");
resultat.setEditable(false);
gb.gridy=8;gb.gridx=2;

22/34
gb.gridwidth=GridBagConstraints.REMAINDER;
add (resultat,gb);
calculer();

setTitle("Equation de DRAKE");
setResizable(false);
setSize(400, 200);
setLocationRelativeTo(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}

public String calculer(){


double rs=0.0;
double j1=((double)jl1.getValue());
double j2=((double)jl2.getValue()/100);
double j3=((double)jl3.getValue()/2);
double j4=((double)jl4.getValue()/100);
double j5=((double)jl5.getValue()/100);
double j6=((double)jl6.getValue()/100);
double j7=((double)jl7.getValue());
vjl1.setText(""+j1);
vjl2.setText(""+j2);
vjl3.setText(""+j3);
vjl4.setText(""+j4);
vjl5.setText(""+j5);
vjl6.setText(""+j6);
vjl7.setText(""+j7);

rs=j1*j2*j3*j4*j5*j6*j7;

return ""+new DecimalFormat("0.00").format(rs);


}

public static void main(String[] args) {new Drake();}

@Override
public void stateChanged(ChangeEvent e) {resultat.setText(calculer());}
}

23/34
Exercice 11 (Serialization)

Ecrire une application en mode console ou GUI Swing permettant d'inserer des adresses de
personnes dans une classe collections de type List ou ArrayList, on se chargera ensuite de faire une
sauvegarde de notre carnet d'adresses avec la technique de la serialization.
Exemple d'affichage en mode console :

Correction :

import ava.util.* ;
import java.io.* ;

class ADR implements Serializable {


public String nom, prenom, rue, cp, ville, email, tel;

ADR(String n, String p, String r, String c, String v, String e, String t)


{
nom=n;
prenom=p;
rue=r;
cp=c;
ville=v;
email=e;
tel=t;
}

public void afficher()


{
System.out.println("===========================");
System.out.println ("Nom : "+nom);
System.out.println ("prenom : "+prenom);
System.out.println ("rue : "+rue);
System.out.println ("ville : "+ville);
System.out.println ("cp : "+cp);
System.out.println ("email : "+email);
System.out.println ("tel : "+tel);
System.out.println("===========================");
}

}//fin class ADR

24/34
public class AdresseSer {

ArrayList v;
Scanner sc;
String ligne="";

public AdresseSer()
{
v=new ArrayList();
//relire les donnees serialises ici
deserialize();
sc=new Scanner(System.in);
menu();
}

void ajouter(){
String nom="",prenom="",rue="",ville="",email="",cp="",tel="";

System.out.println("Ajouter une personne :");

try{
System.out.print("Nom : ");nom=sc.next();
System.out.print("prenom : ");prenom=sc.next();
System.out.print("rue : ");rue=sc.next();
System.out.print("ville : ");ville=sc.next();
System.out.print("cp : ");cp=sc.next();
System.out.print("email : ");email=sc.next();
System.out.print("tel : ");tel=sc.next();
}catch(Exception e) {}
v.add(new ADR(nom,prenom,rue,cp,ville,email,tel));
System.out.println("Personne ajouter...");System.out.println();System.out.println();
}

void trier(){
ADR tmp;
String s1,s2;

System.out.println ("Trier les noms :");

for (int i=0;i<v.size();i++){


for(int j=0;j<v.size()-1;j++) {
s1=((ADR)v.get(j)).nom;
s2=((ADR)v.get(j+1)).nom;

if (s1.compareToIgnoreCase(s2)>0) {
tmp=(ADR)v.get(j);
v.set(j,(ADR)v.get(j+1));
v.set(j+1,tmp);
}
}
}
System.out.println("Fin du tri des noms...");
System.out.println();
System.out.println();
}

void lister(){
System.out.println ("Lister les personnes : ");
for (int rec=0;rec<v.size();rec++){System.out.println(((ADR)v.get(rec)).nom+" "+((ADR)v.get(rec)).prenom);}

25/34
System.out.println();
System.out.println();
}

void afficher()
{
System.out.println("Info sur une personne : ");System.out.println();
System.out.print("Nom de la personne ? : " );
String leNom="";
try{leNom=sc.next();} catch(Exception e){}

for (int rec=0; rec<v.size();rec++)


{
if (((ADR)v.get(rec)).nom.compareToIgnoreCase(leNom)==0) {((ADR)v.get(rec)).afficher();}
}
System.out.println();
System.out.println();

public void menu()


{int choix;
// afficher menu
while(true){
System.out.println("1 Ajouter un nom");
System.out.println("2 Trier par nom");
System.out.println("3 Lister les noms");
System.out.println("4 Afficher info d'un nom");
System.out.println ("5 Quitter");

try{
System.out.print("Votre choix ? ");ligne=sc.next();}catch(Exception e) {}

try {choix=Integer.parseInt(ligne);} catch (Exception e) {choix=0;}

switch(choix)
{
case 1: ajouter();break;
case 2: trier();break;
case 3: lister();break;
case 4: afficher();break;
case 5:

{//serialiser les donnees ici


persistance();
System.exit(0);
}

default: System.out.println ("Erreur de choix...");


}
}
}

public static void main(String args[]) {AdresseSer adr=new AdresseSer();}

public void persistance(){


try{
ObjectOutputStream oo=new ObjectOutputStream(new FileOutputStream("contacts.dat"));
for (int i=0;i<v.size();i++){
ADR ObjAdr=(ADR)v.get(i);

26/34
oo.writeObject(ObjAdr);
}
oo.close();
}catch(Exception ex){ex.printStackTrace();}
}

public void deserialize(){


try{
ObjectInputStream oi=new ObjectInputStream(new FileInputStream("contacts.dat"));
while (true){
ADR contact=(ADR)oi.readObject();
v.add(contact);
}
}catch(Exception ex){}
}
}//fin de la classe AdresseSer

Exercice 12 (JDBC)

Nous allons reprendre notre carnet d'adresses précédent, et remplacer avanteugeusement la classe
collection ArrayList et le principe de la sérialisation par une base de données en utilisant les accés
JDBC sur une base derby ou Microsoft Access.

Correction :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

public class AdresseJDBC {

Scanner sc;
String ligne="";
Connection connect=null;
ResultSet rs=null;
Statement stm=null;

public AdresseJDBC() {
try {
//acceder au driver SGBD
Class.forName("org.apache.derby.jdbc.ClientDriver");
connect=DriverManager.getConnection("jdbc:derby://localhost:1527/ contacts", »tondeurh ", "licenceig");
stm = connect.createStatement();

} catch (ClassNotFoundException ex) {


Logger.getLogger(AdresseJDBC.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(AdresseJDBC.class.getName()).log(Level.SEVERE, null, ex);
}

sc=new Scanner(System.in);

27/34
menu();
}

public void menu()


{int choix;
// afficher menu
while(true){
System.out.println("1 Ajouter un nom");
System.out.println("3 Lister les noms");
System.out.println("4 Afficher info d'un nom");
System.out.println ("5 Quitter");

try{
System.out.print("Votre choix ? ");ligne=sc.next();}catch(Exception e) {}

try {choix=Integer.parseInt(ligne);} catch (Exception e) {choix=0;}

switch(choix)
{
case 1: ajouter();break;
case 3: lister();break;
case 4: afficher();break;
case 5: System.exit(0);break;

default: System.out.println ("Erreur de choix...");


}
}
}

public void ajouter(){

String nom="",prenom="",rue="",ville="",email="",cp="",tel="";

System.out.println("Ajouter une personne :");

try{
System.out.print("Nom : ");nom=sc.next();
System.out.print("prenom : ");prenom=sc.next();
System.out.print("rue : ");rue=sc.next();
System.out.print("ville : ");ville=sc.next();
System.out.print("cp : ");cp=sc.next();
System.out.print("email : ");email=sc.next();
System.out.print("tel : ");tel=sc.next();
}catch(Exception e) {}

try {
String requete="insert into contact(NOM,PRENOM,RUE,CP,VILLE,EMAIL,TEL) VALUES
('"+nom+"','"+prenom+"','"+rue+"','"+cp+"','"+ville+"','"+email+"','"+tel+"')";
stm.executeUpdate(requete);
} catch (SQLException e) { e.printStackTrace(); }
}

public void lister(){


try {
System.out.println ("Lister les personnes : ");
String requete="select NOM,PRENOM FROM contact";
rs = stm.executeQuery(requete);
while (rs.next()) {
String nom = rs.getString("NOM");
String prenom = rs.getString("PRENOM");

28/34
System.out.println(nom + " : " + prenom);
}
System.out.println("\n\n");
} catch (SQLException ex) {
Logger.getLogger(AdresseJDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}

void afficher()
{
System.out.println("Info sur une personne : ");System.out.println();
System.out.print("Nom de la personne ? : " );
String leNom="";
try{leNom=sc.next();} catch(Exception e){}

try{
String requete="select * FROM contact WHERE NOM='"+leNom+"'";
rs = stm.executeQuery(requete);
while (rs.next()) {
String nom = rs.getString("NOM");
String prenom = rs.getString("PRENOM");
String rue = rs.getString("RUE");
String cp = rs.getString("CP");
String ville = rs.getString("VILLE");
String email= rs.getString("EMAIL");
String tel=rs.getString("TEL");
System.out.println(nom + " " + prenom);
System.out.println(rue+" "+cp+" "+ville);
System.out.println(email+"\n"+tel);
}
System.out.println("\n\n");
} catch (SQLException ex) {
Logger.getLogger(AdresseJDBC.class.getName()).log(Level.SEVERE, null, ex);
}
}

public static void main(String[] args) {new AdresseJDBC();}

Exercice 13 (classe Properties)


Nous allons écrire une petite classe de lecture/écriture de fichiers paramétres au format properties
pour cela on va reprendre notre application carnet d'adresse SGBD (exercice 12) et stocker dans un
fichier properties les informations de connection à la base de données (ligne du driver, connection a
la base, numero de port, nom de la base, login et mot de passe).

Correction :

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*

29/34
* @author tondeur-h
*/
class proprietes {
FileInputStream is;

String driver=null;
String base=null;
String host=null;
String port=null;
String login=null;
String mdp=null;

public proprietes() {
try {
Properties p=new Properties();
is=new FileInputStream("ADRJDBC.properties");
p.load(is);
driver=p.getProperty("driver","org.apache.derby.jdbc.ClientDriver");
host=p.getProperty("host","localhost");
base=p.getProperty("DB","contacts");
port=p.getProperty("port","1527");
login=p.getProperty("login","tondeurh");
mdp=p.getProperty("mdp", "licenceig");
is.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(proprietes.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(proprietes.class.getName()).log(Level.SEVERE, null, ex);
}
}
} //fin de la classe proprietes

Modifiez le constructeur de l'exercice précédent comme ceci :

public AdresseJDBC() {
try {
proprietes p=new proprietes();
//acceder au driver SGBD
Class.forName(p.driver);
connect=DriverManager.getConnection("jdbc:derby://"+p.host+":"+p.port+"/"+p.base,p.login, p.mdp);
stm = connect.createStatement();

} catch (ClassNotFoundException ex) {


Logger.getLogger(AdresseJDBC.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(AdresseJDBC.class.getName()).log(Level.SEVERE, null, ex);
}

sc=new Scanner(System.in);
menu();
}

Exercice Final (sauvegarde avec IO)


Nous allons reprendre notre carnet d'adresses précédent, et remplacer le principe de la sérialisation
par une sauvegarde dans un fichier texte de notre carnet d'adresses.

30/34
Correction :

import java.util.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;

class ADR implements Serializable {


public String nom, prenom, rue, cp, ville, email, tel;

ADR(){
super();
}

ADR(String n, String p, String r, String c, String v, String e, String t)


{
nom=n;
prenom=p;
rue=r;
cp=c;
ville=v;
email=e;
tel=t;
}

public void afficher()


{
System.out.println("===========================");
System.out.println ("Nom : "+nom);
System.out.println ("prenom : "+prenom);
System.out.println ("rue : "+rue);
System.out.println ("ville : "+ville);
System.out.println ("cp : "+cp);
System.out.println ("email : "+email);
System.out.println ("tel : "+tel);
System.out.println("===========================");
}

public void sauve(PrintWriter pw){


pw.println(nom);
pw.println(prenom);
pw.println(rue);
pw.println(ville);
pw.println(cp);
pw.println(email);
pw.println(tel);
}

public void lire(BufferedReader br){


try {
nom=br.readLine();
prenom=br.readLine();
rue=br.readLine();
ville=br.readLine();
cp=br.readLine();
email=br.readLine();
tel=br.readLine();
} catch (IOException ex) {
Logger.getLogger(ADR.class.getName()).log(Level.SEVERE, null, ex);
}

31/34
}

}//fin class ADR

public class AdresseIO {

ArrayList v;
Scanner sc;
String ligne="";

public AdresseIO()
{
v=new ArrayList();
//relire les donnees serialises ici
deserialize();
sc=new Scanner(System.in);
menu();
}

void ajouter(){
String nom="",prenom="",rue="",ville="",email="",cp="",tel="";

System.out.println("Ajouter une personne :");

try{
System.out.print("Nom : ");nom=sc.next();
System.out.print("prenom : ");prenom=sc.next();
System.out.print("rue : ");rue=sc.next();
System.out.print("ville : ");ville=sc.next();
System.out.print("cp : ");cp=sc.next();
System.out.print("email : ");email=sc.next();
System.out.print("tel : ");tel=sc.next();
}catch(Exception e) {}
v.add(new ADR(nom,prenom,rue,cp,ville,email,tel));
System.out.println("Personne ajouter...");System.out.println();System.out.println();
}

void trier(){
ADR tmp;
String s1,s2;

System.out.println ("Trier les noms :");

for (int i=0;i<v.size();i++){


for(int j=0;j<v.size()-1;j++) {
s1=((ADR)v.get(j)).nom;
s2=((ADR)v.get(j+1)).nom;

if (s1.compareToIgnoreCase(s2)>0) {
tmp=(ADR)v.get(j);
v.set(j,(ADR)v.get(j+1));
v.set(j+1,tmp);
}
}
}
System.out.println("Fin du tri des noms...");
System.out.println();
System.out.println();
}

32/34
void lister(){
System.out.println ("Lister les personnes : ");
for (int rec=0;rec<v.size();rec++){System.out.println(((ADR)v.get(rec)).nom+" "+((ADR)v.get(rec)).prenom);}
System.out.println();
System.out.println();
}

void afficher()
{
System.out.println("Info sur une personne : ");System.out.println();
System.out.print("Nom de la personne ? : " );
String leNom="";
try{leNom=sc.next();} catch(Exception e){}

for (int rec=0; rec<v.size();rec++)


{
if (((ADR)v.get(rec)).nom.compareToIgnoreCase(leNom)==0) {((ADR)v.get(rec)).afficher();}
}
System.out.println();
System.out.println();

public void menu()


{int choix;
// afficher menu
while(true){
System.out.println("1 Ajouter un nom");
System.out.println("2 Trier par nom");
System.out.println("3 Lister les noms");
System.out.println("4 Afficher info d'un nom");
System.out.println ("5 Quitter");

try{
System.out.print("Votre choix ? ");ligne=sc.next();}catch(Exception e) {}

try {choix=Integer.parseInt(ligne);} catch (Exception e) {choix=0;}

switch(choix)
{
case 1: ajouter();break;
case 2: trier();break;
case 3: lister();break;
case 4: afficher();break;
case 5:

{//serialiser les donnees ici


persistance();
System.exit(0);
}

default: System.out.println ("Erreur de choix...");


}
}
}

public static void main(String args[]) {AdresseIO adr=new AdresseIO();}

public void persistance(){


try{

33/34
PrintWriter oo=new PrintWriter(new FileWriter("contacts.dat"));
for (int i=0;i<v.size();i++){
((ADR)v.get(i)).sauve(oo);
}
oo.close();
}catch(Exception ex){ex.printStackTrace();}
}

public void deserialize(){


try{
BufferedReader oi=new BufferedReader(new FileReader("contacts.dat"));
while (oi.ready()){
ADR contact=new ADR();
contact.lire(oi);
v.add(contact);
}
}catch(Exception ex){}

}
}//fin de la classe AdresseIO

34/34

Вам также может понравиться