Lee todo el texto de un archivo
Aquí un compacto, robusto lenguaje de Java 7, envuelto en un método de utilidad:
static String readFile(String path, Charset encoding)
throws IOException
{
byte[] encoded = Files.readAllBytes(Paths.get(path));
return new String(encoded, encoding);
}
Leer las líneas de texto de un archivo
Java 7 añadido una comodidad método para leer un archivo como líneas de texto, representado como un List<String>
. Este enfoque es el de "pérdida", porque la línea de los separadores son despojados de la final de cada línea.
List<String> lines = Files.readAllLines(Paths.get(path), encoding);
La utilización de la memoria
El primer método, que preserva los saltos de línea, temporalmente puede requerir memoria de varias veces el tamaño de el archivo, ya que por un corto tiempo, el contenido de los archivos raw (una matriz de bytes), y el decodificado de caracteres (cada uno de los cuales es de 16 bits, incluso si codificados en 8 bits en el archivo) residen en la memoria a la vez. Lo más seguro es que se aplican a los archivos que saber ser pequeño en relación a la memoria disponible.
El segundo método, la lectura de las líneas, es generalmente más eficiente de la memoria, porque la entrada de bytes de buffer para la decodificación no necesita contener el archivo completo. Sin embargo, todavía no es el adecuado para los archivos que son muy grandes para el tamaño de la memoria disponible.
Para la lectura de archivos de gran tamaño, usted necesita un diseño diferente para su programa, uno que lee un fragmento de texto de un arroyo, la procesa, y luego pasa a la siguiente, la reutilización del mismo tamaño fijo bloque de memoria. Aquí, la "gran" depende de las características del equipo. Hoy en día, este umbral puede ser de varios gigabytes de memoria RAM.
Codificación de caracteres
Una cosa que falta de la muestra en el post original es la codificación de caracteres. Hay algunos casos especiales, donde la plataforma por defecto es lo que quieres, pero son raros, y deben ser capaces de justificar su elección.
La StandardCharsets
clase de definir algunas constantes para las codificaciones requiere de todos los tiempos de ejecución de Java:
String content = readFile("test.txt", StandardCharsets.UTF_8);
La plataforma por defecto está disponible a partir de la Charset
de la clase en sí:
String content = readFile("test.txt", Charset.defaultCharset());
Nota: Esta respuesta sustituye en gran medida a mi Java versión 6. La utilidad de Java 7 de forma segura simplifica el código, y la respuesta anterior, que utiliza un mapa de bytes de buffer, impidió que el archivo que se lea de ser eliminado hasta que el búfer asignado fue el recolector de basura. Puede ver la versión antigua a través de la "editar" que aparece en esta respuesta.