Java: cómo leer un archivo de texto

Resuelto aks asked hace 14 años • 9 respuestas

Quiero leer un archivo de texto que contenga valores separados por espacios. Los valores son números enteros. ¿Cómo puedo leerlo y ponerlo en una lista de matriz?

A continuación se muestra un ejemplo del contenido del archivo de texto:

1 62 4 55 5 6 77

Quiero tenerlo en una lista de matrices como [1, 62, 4, 55, 5, 6, 77]. ¿Cómo puedo hacerlo en Java?

aks avatar May 07 '10 18:05 aks
Aceptado

Puede utilizarlo Files#readAllLines()para convertir todas las líneas de un archivo de texto en un archivo List<String>.

for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    // ...
}

Tutorial: E/S básica > E/S de archivos > Lectura, escritura y creación de archivos de texto


Puede utilizar String#split()para dividir Stringen partes según una expresión regular.

for (String part : line.split("\\s+")) {
    // ...
}

Tutorial: Números y cadenas > Cadenas > Manipulación de caracteres en una cadena


Puedes utilizar Integer#valueOf()para convertir un Stringen un Integer.

Integer i = Integer.valueOf(part);

Tutorial: Números y cadenas > Cadenas > Conversión entre números y cadenas


Puedes usarlo List#add()para agregar un elemento a un archivo List.

numbers.add(i);

Tutorial: Interfaces > La interfaz de lista


Entonces, en pocas palabras (asumiendo que el archivo no tiene líneas vacías ni espacios en blanco al final/inicial).

List<Integer> numbers = new ArrayList<>();
for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    for (String part : line.split("\\s+")) {
        Integer i = Integer.valueOf(part);
        numbers.add(i);
    }
}

Si ya tienes Java 8, puedes incluso usar Stream API para esto, comenzando con Files#lines().

List<Integer> numbers = Files.lines(Paths.get("/path/to/test.txt"))
    .map(line -> line.split("\\s+")).flatMap(Arrays::stream)
    .map(Integer::valueOf)
    .collect(Collectors.toList());

Tutorial: Procesamiento de datos con secuencias de Java 8

BalusC avatar May 07 '2010 11:05 BalusC

Java 1.5 introdujo la clase Scanner para manejar entradas de archivos y secuencias.

Se utiliza para obtener números enteros de un archivo y se vería así:

List<Integer> integers = new ArrayList<Integer>();
Scanner fileScanner = new Scanner(new File("c:\\file.txt"));
while (fileScanner.hasNextInt()){
   integers.add(fileScanner.nextInt());
}

Sin embargo, consulte la API. Hay muchas más opciones para tratar con diferentes tipos de fuentes de entrada, diferentes delimitadores y diferentes tipos de datos.

tschaible avatar May 07 '2010 11:05 tschaible