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