[Java] ¿Cuál es la forma más sencilla de leer un archivo en String?



Answers

Desde Java 7 (Descripción de la API) en adelante puedes hacer:

new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);

Donde filePath es una cadena que representa el archivo que desea cargar.

Question

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de leer un archivo de texto simple en una cadena. Por supuesto, existe la forma habitual de obtener el flujo de entrada y de iterar con readLine () y leer los contenidos en String.

Habiendo hecho esto cientos de veces en el pasado, me preguntaba cómo puedo hacer esto en un mínimo de líneas de código. ¿No hay algo en Java como String fileContents = XXX.readFile(myFile/*File*/) ... más bien algo tan simple como esto?

Sé que hay bibliotecas como Apache Commons IO que proporcionan tales simplificaciones o incluso yo puedo escribir una clase simple de Util para hacer esto. Pero todo lo que me pregunto es: esta es una operación tan frecuente que todos necesitan, entonces ¿por qué Java no proporciona una función tan simple? ¿No hay realmente un solo método en algún lugar para leer un archivo en cadena con alguna codificación predeterminada o especificada?




a continuación está el código simple para leer los contenidos del archivo en una cadena

   try {            
        String line;
        File file = new File("C:/LEO/abc.txt");
        FileReader fr = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fr);
        HashMap< String, Integer> objHashMap = new HashMap<>();

        while((line = bufferedReader.readLine()) != null) {

            String lineWords[] = line.split(" ");
            for(String singleWord:lineWords) {

                System.out.println(singleWord);             
            }
        }

        for(String keyObject:objHashMap.keySet()) {

            System.out.println(keyObject + ": " + objHashMap.get(keyObject));
        }
    } catch(Exception exception) {

        System.out.println("IOException occured");
        exception.printStackTrace();
    }



Esto debería funcionar para usted:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public static void main(String[] args) throws IOException {
    String content = new String(Files.readAllBytes(Paths.get("abc.java")));
}



No escriba su propia clase de utilidades para hacer esto: recomendaría usar Guava , que está lleno de todo tipo de bondad. En este caso, desearía la clase com.google.common.io.Files (si realmente está leyendo un archivo) o CharStreams para una lectura más general. Tiene métodos para leer los datos en una lista de cadenas ( readLines ) o totalmente ( toString ).

También tiene métodos útiles similares para datos binarios. Y luego está el resto de la biblioteca ...

Estoy de acuerdo en que es molesto que no haya nada similar en las bibliotecas estándar. Diablos, solo poder suministrar un CharSet a un FileReader haría la vida un poco más simple ...




Tristemente no.

Estoy de acuerdo en que tal operación frecuente debería tener una implementación más fácil que la copia de entrada línea por línea en bucle, pero tendrás que escribir el método de ayuda o usar una biblioteca externa.




Links