Taille d'un fichier en java

Fermé
ambitieuse - 18 avril 2010 à 13:44
 Utilisateur anonyme - 19 avril 2010 à 21:31

je veux compter le nombre des mots d'un fichier texte en java,j'ai utilisé alors la classe suivante:
public class freq {
int nbMots=0;
public freq(String nomfichier ){

try {
// Création du flux bufférisé sur un FileReader, immédiatement suivi par un
// try/finally, ce qui permet de ne fermer le flux QUE s'il le reader
// est correctement instancié (évite les NullPointerException)
FileReader fr = new FileReader(nomfichier);
BufferedReader in = new BufferedReader(fr);
try{
String line = in.readLine();

while ((line=line.toLowerCase())!= null) {
if (line.equals(" ") )
nbMots++;
line = in.readLine();

}

} finally {
// dans tous les cas, on ferme nos flux
in.close();
}
}
catch(Exception e) {
// erreur de fermeture des flux
System.out.println("Exception: " + e);
}
}


}



puis dans main j'ai fait:
public class Main {
public static void main(String[] args) {
//String path="C:\\Documents and Settings\\safoufa\\Mes documents\\NetBeansProjects\\taille\\doss\\";
System.out.println("la taille est:");
String nomfichier="a\\test.txt";
freq ff=new freq(nomfichier);
System.out.println(ff.nbMots);
}
}
et toujours cette erreur s'affiche:
la taille est:
Exception: java.lang.NullPointerException

plz aidez-moi à trouver l'erreur
A voir également:

1 réponse

Utilisateur anonyme
19 avril 2010 à 21:31
Salut,

while ((line=line.toLowerCase())!= null) { 
if (line.equals(" ") )  //<<<<<<<<<<<<<
nbMots++; 
line = in.readLine();


Ici (<<<<<<<<<<<<<<<<<<), il faudrait plutôt "éclater" la ligne en mots et ainsi obtenir le nombre de mots contenus dans la ligne lue, cumuler ce nombre dans le total géneral qui en fin de fichier sera le résultat attendu.

Comment obtenir le nombre de mots d'une ligne:
Par exemple, depuis la version 1.4 de Java, en utilisant les expressions régulières avec l'API Regex et la méthode split() de la classe Pattern

import java.util.regex.*;

// Ou mieux pour être plus précis:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

// exemple avec la ligne lue suivante

String ligneLue = "Bonjour,   il fait beau aujourd'hui etc...";
      // compilation de la regex avec le motif espace " +"
      // ce qui signifie que le "séparareur" de mots est 1 ou plusieurs espaces
         Pattern p = Pattern.compile(" +");
      // séparation en sous-chaînes (mots) dans un tableau de String(tabMots[])
         String[ ] tabMots = p.split(ligneLue);


Le nombre de mots est la longueur du tableau.

Cordialement,

Dan
0