Télécharger

Transcription

Télécharger
TD4 EXO 1-3 2015 LSIO TONDEUR H
Exercice 1
package jcp;
import
import
import
import
java.io.File;
java.io.FileInputStream;
java.io.FileOutputStream;
java.io.IOException;
/**
*
* @author tondeur-h
*/
public class Jcp {
/**
* Méthode qui permet de copier le fichier source
* vers le dossier destination
* @param source
* @param destination
*/
public void copier_fichier(String source, String destination){
try{
//recuperer le nom du fichier
File fsource=new File(source); //mettre le fichier source sous
forme d'un objet de type File
String nomFichier=fsource.getName(); //recupererle nom du
fichier et son extension
//construire les flux IO
System.out.println("copier le fichier : "+source);
System.out.println("Vers le fichier :
"+destination+File.separator+nomFichier);
FileInputStream is=new FileInputStream(source); //flux IN
FileOutputStream os=new
FileOutputStream(destination+File.separator+nomFichier); //flux OUT
//buffer de 1Mo 1024 x 1024 octets
byte b[];
b=new byte[1024*1024];
int lu=0; //nb octets lu réellement
//boucle de copie
//tant qu'il y a des octets à lire
while (is.available()>0){
//lire les octets et les placer dans le buffer b
lu=is.read(b);
//ecrire ces octets du buffer b vers le fichier destination
os.write(b, 0, lu);
}
//fermer tous les flux
is.close();
os.flush();
os.close();
} catch (IOException ioe){System.out.println("Erreur lors de la
copie!");}
p. 1
TD4 EXO 1-3 2015 LSIO TONDEUR H
//fin de la copie...
System.out.println("Copie terminée...");
}
/**
* constructeur de la classe Jcp
*/
Jcp(String[] argv){
verif_ligne_cmd(argv); //verifier les arguments
copier_fichier(argv[0],argv[1]); //copier le fichier
}
/**
* Afficher la syntaxe de l'application
*/
public void syntaxe(){
System.out.println("Jcp FicherSource DossierDestination");
System.out.println("Ou FichierSource est le nom et chemin complet
du fichier a copier");
System.out.println("Ou DossierDestination est le chemin destination
ou copier le fichier");
System.exit(1); //quitter l'application
}
/**
* Verifier si le fichier source
* et le dossier destination
* sont correct!
* @param argv
*/
public void verif_ligne_cmd(String[] argv){
//si nbarguments < 2 alors quitter
if (argv.length<2){
System.out.println("Pas assez d'arguments sur la ligne de
commande");
syntaxe();
}
//tester le fichier source : Existe t'il ?
File fSource=new File(argv[0]);
if (!fSource.exists()){
System.out.println("Le fichier source n'existe pas!");
syntaxe();
}
//tester dossier destination : Existe t'il ?
File dDestination=new File(argv[1]);
if (!dDestination.exists()){
System.out.println("Le dossier destination n'existe pas");
syntaxe();
}
//tester si dossier destination est en ecriture ?
if (!dDestination.canWrite()){
System.out.println("Le dossier destination est en lecture
seule!");
syntaxe();
p. 2
TD4 EXO 1-3 2015 LSIO TONDEUR H
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//appeler le constructeur en passant le tableau des arguments de la
ligne de cmd
new Jcp(args);
}
} //fin de la classe Jcp
Exercice 2
package jcat;
import
import
import
import
java.io.File;
java.io.IOException;
java.io.PrintWriter;
java.util.Scanner;
/**
*
* @author tondeur-h
*/
public class JCat {
Scanner sc; //classe de saisie
boolean fin=false;
File fout;
/**
* methode qui permet de verifier que le fichier destination n'existe
pas.
* @param dest
*/
public void verif_fichier_destination(String dest){
fout=new File(dest);
//si fichier existe déja, quitter
if (fout.exists()){
syntaxe();
}
}
/**
* methode qui met en place la boucle de saisie
* et ecrit dans le fichier texte les données
*/
public void boucle_de_saisie(){
try{
//creer le fichier de sortie
p. 3
TD4 EXO 1-3 2015 LSIO TONDEUR H
PrintWriter pw=new PrintWriter(fout);
//boucle de saisie
System.out.println("Début de la saisie :");
sc=new Scanner(System.in);
String ligne;
//lire les saisies de l'utilisateur
//jusqu'a ce que l'on rencontre le mot FIN
while (!fin){
ligne=sc.nextLine();
if (ligne.compareToIgnoreCase("FIN")==0){
fin=true;
}
else
{
pw.println(ligne);
pw.flush();
}
} //fin while
pw.close();
System.out.println("Fin de la saisie!");
}catch (IOException ioe){System.out.println("Erreur sur le
flux!");}
}
/**
* Constructeur de la classe
* @param argv
*/
JCat(String [] argv){
verif_fichier_destination(argv[0]); //verifier l'argument de la
ligne de cmd
boucle_de_saisie(); //commencer la saisie des informations
}
/**
* Méthode d'affichage de la syntaxe de l'application
*/
public static void syntaxe(){
System.out.println("JCat FichierDestination");
System.out.println("Ou FichierDestination est le chemin complet du
fichier destination");
System.out.println("et ne doit pas exister!");
System.exit(1); //quitter l'application
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//tester le nb d'arguments doit être suéprieur ou égal à 1
if (args.length>=1){new JCat(args);}
else {System.out.println("Pas assez d'argument sur la ligne de
commande!");syntaxe();}
p. 4
TD4 EXO 1-3 2015 LSIO TONDEUR H
}
} //fin de la classe Jcat
Exercice 3
import
import
import
import
import
import
import
import
java.awt.Color;
java.awt.Font;
java.awt.FontMetrics;
java.awt.Graphics;
java.util.Calendar;
java.util.logging.Level;
java.util.logging.Logger;
javax.swing.JApplet;
/**
*
* @author tondeur-heure
*/
public class Horloge extends JApplet implements Runnable {
Calendar calendrier; //classe abstraite Calendar (calendrier Gregorien)
int heure,minute,secondes; //variable pour stocker Heure:Minute:Seconde
courante
Thread timeExecutor; //Thread qui va permettre l'execution de notre
applet en tant que Thread
String horaire; //chaine complete de l'heure
int largeur,hauteur; //largeur et hauteur de notre applet
/**
* point d'entré de notre Applet
* une Applet ne possede pas de méthode
* public static void main(String argv[])
* mais démarre toujours par cette méthode init
*/
@Override
public void init() {
hauteur=getHeight(); //recuperer la hauteur de notre applet
largeur=getWidth();//recuperer la largeur de notre applet
timeExecutor=new Thread(this); //lancer la Thread qui va se charger
d'afficher l'heure
timeExecutor.start();
}
/**
* La méthode paint appartient a la classe Applet
* c'est une méthode redéfinie qui permet de prendre en charge
* l'écriture sur le canvas e notre applet.
* @param g
*/
@Override
public void paint(Graphics g){
p. 5
TD4 EXO 1-3 2015 LSIO TONDEUR H
//construire la chaine horaire = concaténation des valeurs
heure+minute+secondes
horaire=complement_zero(heure)+":"+complement_zero(minute)+":"+complement_z
ero(secondes);
//affecter la couleur blanche au premier plan
g.setColor(Color.white);
//dessiner un rectangle blanc sur la totalité du canvas
//ceci permet d'effacer l'écran
g.fillRect(0, 0, largeur, hauteur);
//définir une couleur rouge au premier plan
g.setColor(Color.red);
//et une fonte différente
g.setFont(new Font("System", Font.BOLD, 32));
//la classe font Métric va nous permettre de calculer
//la largeur que va prendre notre texte avec la fonte défini.
FontMetrics fm=getFontMetrics(g.getFont());
fm.stringWidth(horaire);
//dessiner la chaine de caractéres sur le canvas
g.drawString(horaire,(largeur/2)(fm.stringWidth(horaire)/2),hauteur/2);
}
/**
* complete avec un zero si la taille est inf a 2
*/
public String complement_zero(int valeur){
String retour=Integer.toString(valeur, 10);
if (retour.length()<2){
retour="0"+retour;
}
return retour;
}
@Override
public void run() {
//boucle infini troujour vrai
while (true){
try {
//on recupere les valeurs de l'heure courante
calendrier=Calendar.getInstance();
heure=calendrier.get(Calendar.HOUR);
minute=calendrier.get(Calendar.MINUTE);
secondes=calendrier.get(Calendar.SECOND);
//tester si on est du matin ou Aprés midi
//ceci pour permettre un affiche sur H 24
if (calendrier.get(Calendar.AM_PM)==Calendar.PM){
heure=heure+12; //si PM alors afficher heure +12 (H24)
} //fin du if
//endormir la thread 1seconde
Thread.sleep(1000);
//redessiner le canvas => appel la méthode paint
repaint();
} catch (InterruptedException ex) {
Logger.getLogger(Horloge.class.getName()).log(Level.SEVERE,
null, ex);
} //fin du catch
p. 6
TD4 EXO 1-3 2015 LSIO TONDEUR H
} //fin du while
} //fin de la méthode run
} //fin de la classe AppletHorloge
A connaitre :
Pour exécuter une Applet, il faut construire également une page HTML qui
permet d’exécuter l’applet dans votre browser préféré (attention à ce que
votre plugin Java soit correctement installé et paramétré).
La page doit contenir le tag HTML <Applet>, ce tag doit indiquer au niveau
du paramètre « codebase » le chemin d’accés au fichier class Java, le
paramètre « code » doit comporter le nom complet de la classe de notre applet
avec son extension et les paramètres « width » et « height » doit comporter
respectivement la largeur et hauteur que doit avoir notre applet.
Ci-dessous un exemple de fichier html d’appel de notre applet.
<HTML>
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<H3><HR WIDTH="100%">Applet HORLOGE<HR WIDTH="100%"></H3>
<P>
<APPLET codebase="classes" code="Horloge.class" width=350 height=200>
</APPLET>
</P>
<HR WIDTH="100%">
</BODY>
</HTML>
Vous avez également la possibilité d’éxécuter dans une page web via un
appel à Java Web Start
Il faut dans un premier temps créer un fichier jnlp qui doit contenir les
informations suivantes :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp href="launch.jnlp" spec="1.0+">
<information>
<title>AppletHorloge</title>
<vendor>tondeur-h</vendor>
<homepage href=""/>
<description>AppletHorloge</description>
<description kind="short">AppletHorloge</description>
<offline-allowed/>
</information>
<update check="background"/>
<resources>
<j2se java-vm-args="-Djava.security.policy=applet.policy"
version="1.8+"/>
<jar href="AppletHorloge.jar" main="true"/>
p. 7
TD4 EXO 1-3 2015 LSIO TONDEUR H
</resources>
<applet-desc height="300" main-class="Horloge" name="AppletHorloge"
width="300">
</applet-desc>
</jnlp>
Et également créer une page HTML qui permet d’appeler ce fichier jnlp
<html>
<head>
<title>Page Test d’applet via JNLP</title>
</head>
<body>
<applet width="300" height="300">
<param name="jnlp_href" value="launch.jnlp"/>
</applet>
</body>
</html>
p. 8