Академический Документы
Профессиональный Документы
Культура Документы
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.
Correction :
package cpsimul;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
FileInputStream fis;
FileOutputStream fos;
long deb, duree;
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);
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());
}
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.
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;
File f;
File [] fl;
int nbrep=0, nbfic=0;
}catch(Exception ioe){
System.out.println("Chemin incorrect...");
System.exit(100);
}
}
3/34
}
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;
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);
}
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(), ""));
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().compareToIgnoreCase("COPIER")==0){
copier(tfSource.getText(), tfDestination.getText());
}
if (e.getActionCommand().compareToIgnoreCase("OPEN")==0){
ouvrir();
}
}
}
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();
}
}
/**
* 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());
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());}
/**
* 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
Ecrire le même exercice que le numero 3, mais en mode graphique basé sur Swing en utilisant un
BorderLayout.
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
import java.awt.BorderLayout;
import java.awt.Color;
9/34
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
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);
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);
}
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 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);
}
@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);}
}
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);
}
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);
}
@Override
public void mouseDragged(MouseEvent e) {
X=e.getX();
Y=e.getY();
}
@Override
public void mouseMoved(MouseEvent e) {}
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... ».
Correction :
import java.net.*;
import java.io.*;
import java.util.*;
ServerSocket ss;
13/34
Socket s;
public ServeurH(){
System.out.println ("Demmarage du serveur...");
try {
ss=new ServerSocket(1234);
while(true)
{
s=ss.accept();
}
}
catch(Exception e){System.out.println("Erreur ServeurH");e.printStackTrace();}
}
Socket s;
DataOutputStream byteOutput;
BufferedReader byteInput;
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){}
}
}
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;
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());
}
Correction INTERFACE :
15/34
package rmih;
import java.rmi.Remote;
import java.rmi.RemoteException;
package rmih;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.*;
Calendar c;
public RmiHeureImpl ()
throws RemoteException {
super ();
package rmih;
16/34
import java.rmi.Naming;
RmiH(){
try {
java.rmi.registry.LocateRegistry.createRegistry(1099);
package rmih;
import java.rmi.*;
import java.io.*;
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();
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
}//fin du while
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 :
• fi est la fraction de ces planètes sur lesquelles apparaît une vie intelligente,
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) :
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;
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);
}
rs=j1*j2*j3*j4*j5*j6*j7;
@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.* ;
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="";
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;
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){}
try{
System.out.print("Votre choix ? ");ligne=sc.next();}catch(Exception e) {}
switch(choix)
{
case 1: ajouter();break;
case 2: trier();break;
case 3: lister();break;
case 4: afficher();break;
case 5:
26/34
oo.writeObject(ObjAdr);
}
oo.close();
}catch(Exception ex){ex.printStackTrace();}
}
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;
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();
sc=new Scanner(System.in);
27/34
menu();
}
try{
System.out.print("Votre choix ? ");ligne=sc.next();}catch(Exception e) {}
switch(choix)
{
case 1: ajouter();break;
case 3: lister();break;
case 4: afficher();break;
case 5: System.exit(0);break;
String nom="",prenom="",rue="",ville="",email="",cp="",tel="";
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(); }
}
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);
}
}
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
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();
sc=new Scanner(System.in);
menu();
}
30/34
Correction :
import java.util.*;
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
ADR(){
super();
}
31/34
}
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="";
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;
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){}
try{
System.out.print("Votre choix ? ");ligne=sc.next();}catch(Exception e) {}
switch(choix)
{
case 1: ajouter();break;
case 2: trier();break;
case 3: lister();break;
case 4: afficher();break;
case 5:
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();}
}
}
}//fin de la classe AdresseIO
34/34