Files
t12ficheros-ejerciciosB/src/main/java/iesthiar/Ejercicio_B7.java
2024-05-13 21:24:43 +02:00

90 lines
3.4 KiB
Java

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<String, Integer> hashPalabras = new Hashtable<String, Integer>();
// 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<String, Integer> t) {
// Obtenermos una lista ordenada por nº de palabras
ArrayList<Map.Entry<String, Integer>> l = new ArrayList(t.entrySet());
Collections.sort(l, Collections.reverseOrder(new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> 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));
}
}
}