Objectifs : Mise en œuvre des sockets en mode connecté.
Utilisation des classes Socket et ServerSocket du paquetage java.net.
Révision : Gestion des exceptions - Manipulation des flux d’entrée-sortie.
Note : On pourra utiliser les supports de cours sur les sockets clients et les socket serveurs.
Dans cet exercice nous écrivons un serveur qui va lister les différents mots d'un fichier
texte en comptant pour chaque mot son nombre d'occurrences.
On écrira aussi un client qui doit se connecter, lire le fichier en l'envoyant au serveur et attendre la réponse
(la liste des mots et leurs occurrences).
La classe CompterMots
import java.io.*;
import java.util.*;
class CompterMots {
public static void main (String[] argv) {
// les parametres sont-ils précisés
if (argv.length < 2) {
System.err.println
("usage : java CompterMots fichier_texte fichier_resultat");
}
try {
Hashtable table = new Hashtable();
BufferedReader entree = new BufferedReader(new FileReader(argv[0]));
String ligne;
StringTokenizer st;
// lecture du fichier ligne à ligne
while ((ligne = entree.readLine()) != null) {
// creation du découpeur de ligne
st = new StringTokenizer(ligne, " ,.;:_-+*/\\.;\n\"'{}()=><\t!?");
// tant qu'il y a des mots
while (st.hasMoreTokens()) {
// on recupere le mot
String mot = st.nextToken();
// on le cherche dans la table
Object obj = table.get(mot);
// s'il n'y est pas
if
(obj == null)
// on l'ajoute
table.put(mot, new Integer(1));
else {
// sinon on incrémente
Integer prec = (Integer) obj;
table.put(mot, new Integer(prec.intValue()+1));
}
}
}
// ne pas oublier de fermer le fichier
entree.close();
Enumeration lesMots = table.keys();
// Creation du fichier resultat
PrintWriter fluxSortie = new PrintWriter(new FileWriter(argv[1]));
// parcours de toutes les entrées de la table de hashing
while (lesMots.hasMoreElements()) {
// on recupere le mot suivant
String mot = (String)lesMots.nextElement();
// on cherche l'Integer correspondant dans la table
Object obj = table.get(mot);
if
(obj == null)
System.err.println("erreur");
else {
// on affiche sur l'écran et dans le fichier resultat
Integer nb = (Integer) obj;
System.out.println("Le mot "+mot+" est présent "+nb+" fois");
fluxSortie.println("Le mot "+mot+" est présent "+nb+" fois");
}
}
// ne pas oublier de fermer le fichier
fluxSortie.close();
} catch(FileNotFoundException e1) {
System.out.println("Le fichier "+argv[0]+" n'existe pas");
} catch(IOException e2) {
System.out.println("Erreur pendant la lecture du fichier");
}
}
}
Extrait de la classe java.lang.System
java.lang.Object | +--java.lang.System
The System class contains several useful class fields and
methods. It cannot be instantiated.
Among the facilities provided by the System class are standard
input, standard output, and error output streams; access to externally defined
"properties"; a means of loading files and libraries; and a utility
method for quickly copying a portion of an array.
| Field Summary | |
static PrintStream |
errThe "standard" error output stream. |
static InputStream |
inThe "standard" input stream. |
static PrintStream |
outThe "standard" output stream. |