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
1 / 34 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !