Java: cómo leer un archivo de texto
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?
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 String
en 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 String
en 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
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.