package iesthiar; import java.io.*; import java.util.*; public class Ejercicio_B7 { public static void main(String[] args) { System.out.println("ESTADÍSTICAS DE LIBROS"); System.out.println("----------------------"); System.out.println(""); try { // Obtenemos la lista de archivos de la carpeta Libros File rutaLibros = new File("Documentos/Libros"); File[] listaLibros = rutaLibros.listFiles(); // Para cada archivo for (File libro : listaLibros) { // Lector de archivo Scanner lector = new Scanner(libro); // Inicializamos contadores y Hashtable int numLin = 0, numPal = 0, numCar = 0; Hashtable hashPalabras = new Hashtable(); // Procesamos líneas mientras quede algo por leer while (lector.hasNext()) { // Línea String linea = lector.nextLine(); numLin++; // Palabras String[] palabras = linea.split(" "); numPal += palabras.length; // Para cada palabra actualizamos numCar y metemos en la Hashtable for (String palabra : palabras) { char[] letras = palabra.toCharArray(); numCar += letras.length; // Si ya existe la palabra aumentamos su valor, si no existe la guardamos if (hashPalabras.containsKey(palabra)) { hashPalabras.put(palabra, hashPalabras.get(palabra) + 1); } else { hashPalabras.put(palabra, 1); } } } // Mostramos estadísticas del libro System.out.println("Libro: " + libro.getName()); System.out.println("Lineas totales: " + numLin); System.out.println("Número de palabras: " + numPal); System.out.println("Número de carácteres: " + numCar); System.out.println("Las 10 palabras más comunes son: "); // Muestra las 10 palabras más comunes muestraPalabrasMasComunes(hashPalabras); System.out.println(""); } } catch (FileNotFoundException e) { System.out.println("Error: El fichero no existe"); } catch (Exception e) { System.out.println("Error: " + e); } } // Muestra las 10 palabras más comunes public static void muestraPalabrasMasComunes(Hashtable t) { // Obtenermos una lista ordenada por nº de palabras ArrayList> l = new ArrayList(t.entrySet()); Collections.sort(l, Collections.reverseOrder(new Comparator>() { public int compare(Map.Entry o1, Map.Entry o2) { return o1.getValue().compareTo(o2.getValue()); } })); // Imprime las 10 palabras más comunes for (int i = 0; i < 10; i++) { System.out.println(l.get(i)); } } }