Guía y comprobaciones
Leer un texto pequeño completo
Desde Java 11, Files.readString permite leer el contenido con una codificación explícita. Este programa espera un archivo ejemplo.txt en el directorio de ejecución.
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.io.IOException;
public class Ejemplo {
public static void main(String[] args) throws IOException {
String texto = Files.readString(Path.of("ejemplo.txt"), StandardCharsets.UTF_8);
System.out.println(texto);
}
}
El directorio de ejecución no tiene por qué coincidir con la carpeta del archivo fuente. Al depurar una ruta relativa, comprueba dónde se lanzó el programa antes de copiar el archivo a varios directorios.
Recorrer sin reunir todo el texto
Para un archivo grande puede ser preferible procesar líneas. El flujo que devuelve Files.lines debe cerrarse; try con recursos expresa esa obligación.
try (var lineas = Files.lines(Path.of("ejemplo.txt"), StandardCharsets.UTF_8)) {
long noVacias = lineas.filter(linea -> !linea.isBlank()).count();
System.out.println(noVacias);
}
Este segundo fragmento se coloca en un método que gestione las excepciones de entrada/salida y utiliza los imports del programa anterior. No carga deliberadamente todas las líneas en una lista.
Ausencia, permisos y codificación
Un archivo vacío es un contenido válido; un archivo inexistente es un fallo distinto. No conviertas cualquier excepción en una cadena vacía porque perderías esa diferencia. Si el texto aparece alterado, comprueba la codificación con la que se escribió: elegir UTF-8 al leer no repara bytes que ya pertenecen a otra codificación.
Una ruta recibida de fuera
Si una aplicación permite seleccionar nombres de archivo, restringe las rutas al directorio y permisos previstos. Un ejemplo de consola que lee un archivo de ejercicios no debe convertirse sin controles en un servicio que acepte rutas arbitrarias.
Prueba un archivo de tres líneas con una en blanco, uno vacío y uno inexistente. Para contar, define además si una línea con espacios es vacía: isBlank y isEmpty expresan decisiones diferentes.
Preguntas frecuentes
¿readString sirve para cualquier tamaño?
Lee el contenido completo en memoria. Para archivos grandes, considera un procesamiento por líneas u otro enfoque acotado.
¿La ruta es relativa al .java?
No necesariamente. Una ruta relativa se resuelve desde el directorio de ejecución del proceso.
Continúa con una guía relacionada
Documentación oficial
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.