Java - Leer matriz de un archivo texto

 
Vista:

Leer matriz de un archivo texto

Publicado por Johan Medina (2 intervenciones) el 28/01/2020 19:43:40
Buen dia.

Estoy haciendo un proyecto en el cual tengo que leer un archivo txt, este archivo se encuentra estructurado asi:
en la primer linea o renglon se encuentra un entero entre 8 y 16, este # indica el orden de la matriz que ha de leerse. Posterior a esto se encuentra la matriz de ese orden separados por espacio.

Ej:

16
80 904 67 307 322 738 659 27 268 519 43 449 16 582 364 730
453 862 49 900 377 143 820 97 692 537 700 950 161 372 28 602
842 159 434 261 786 867 909 75 774 278 609 618 905 828 787 242
596 949 306 102 136 609 499 681 273 433 767 264 449 516 193 907
198 805 615 101 905 712 78 515 605 443 276 911 749 370 677 571
888 685 251 337 53 447 357 702 191 130 168 175 399 708 178 574
861 358 747 748 315 886 340 687 617 55 115 932 448 94 771 698
521 812 114 131 677 883 637 699 117 94 515 779 664 556 802 144
311 132 305 182 544 645 542 373 868 744 452 766 737 643 24 917
600 347 806 55 106 406 358 29 603 643 47 925 925 830 238 129
145 757 853 978 389 692 476 113 38 815 673 77 636 780 942 705
614 224 788 383 498 693 715 303 621 146 560 429 462 941 474 5
678 944 31 87 556 221 405 765 90 570 277 452 142 0 172 852
168 184 191 999 827 779 731 79 354 483 587 548 976 680 24 470
798 501 801 868 539 215 833 320 187 888 188 996 176 387 337 836
959 921 182 559 892 483 153 798 236 745 828 695 660 203 894 938


Cree una clase matriz en la cual se crea el arreglo de 2 dimensiones, sin embargo no se que método usar para guardar el primer dato en una variable y los de la matriz en la posición correspondiente a cada dato.



Estoy intentando con este código, creo una variable lineas para que cuando lea la primera poner un condicional que lleve el dato del primer renglon a una variable y ya cuando sea diferente a este lo guarde en la matriz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        File f = new File("Archivo.txt");
        Scanner s;
        try {
            s = new Scanner(f);
            int lineas=0;
            while (s.hasNextLine()) {
                System.out.println(lineas);
                String linea = s.nextLine();
                Scanner sl = new Scanner(linea);
                sl.useDelimiter("\\s*  \\s*");
                System.out.println(sl.next());
                int orden=s1.next;
                lineas++;
            }
            s.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 2.268
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Leer matriz de un archivo texto

Publicado por Kabuto (568 intervenciones) el 29/01/2020 00:13:49
Hola.

Para leer ficheros, aunque se puede usar perfectamente la clase Scanner, yo prefiero usar la clase BufferedReader (que a su vez utiliza un objeto FileReader).

Entonces, la primera línea ya sabes que te da la longitud de la matriz cuadrada, así que tras leer esta primera línea, ya puedes crear la matriz.
Las siguientes líneas te proporcionan los enteros separados por espacios en blanco. Con cada lectura de estas líneas obtienes un String con todos estos valores.
Este String puedes separarlo usando el método split(" ") para que divida ese String en "porciones" a partir de los espacios en blanco. Estas porciones te son devueltas en un array de tipo String.

Ahora solo tienes que recorrer este array y cada elemento moverlo a la fila correspondiente de la matriz. Además intuyo que cada valor habrá que convertirlo de String a int. Para esto te puedes valer del método Integer.parseInt()

Todo este proceso lo repites dentro de un bucle que dure hasta que no queden líneas, o bien según el valor que te ha dado la primera línea del fichero, es decir, la longitud de la matriz.

Para recorrer las filas de la matriz y mover los datos que te da cada línea, necesitarás una variable a parte que se irá incrementando en cada repetición del bucle.


A modo de ejemplo rápido, te pongo este código que siguiendo esta lógica, leer el archivo de texto y obtiene los valores enteros.

Lo único que habría que cambiar es, que según entiendo al leer tu enunciado, se ha de crear una clase llamada Matriz para modelar el array de dos dimensiones.
En mi código de ejemplo, estoy usando directamente un array de dos dimensiones y no una clase.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
 
public class LeerMatriz {
 
	public static void main(String[] args) {
 
		int[][] matriz;
 
		try {
			BufferedReader br = new BufferedReader(new FileReader("matriz.txt"));
			//Primera linea nos dice longitud de la matriz
			String linea = br.readLine();
			int longitud = Integer.parseInt(linea);
			matriz = new int[longitud][longitud];
			//Las siguientes lineas son filas de la matriz
			linea = br.readLine();
			int fila = 0; //Para recorrer las filas de la matriz
			while(linea != null) {
				/*
				 * Tenemos todos los enteros JUNTOS en el String linea.
				 * Con split() los SEPARAMOS en un array donde cada entero
				 * es un String individual. Con un bucle, los parseamos a Integer
				 * para guardarlos en la matriz
				 */
				String[] enteros = linea.split(" ");
				for (int i = 0; i < enteros.length; i++)
					matriz[fila][i] = Integer.parseInt(enteros[i]);
 
				fila++; //Incrementamos fila para la próxima línea de enteros
				linea = br.readLine(); //Leemos siguiente línea
			}
			br.close(); //Cerramos el lector de ficheros
 
			//Mostramos la matriz leída
			for (int i = 0; i < longitud; i++) {
				for (int j = 0; j < longitud; j++)
					System.out.print(matriz[i][j] + " ");
				System.out.println();
			}
		} catch (FileNotFoundException e) {
			System.out.println("No se encuentra archivo");
			e.printStackTrace();
		} catch (NumberFormatException e) {
			System.out.println("No se pudo convertir a entero");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Error accediendo al archivo.");
			e.printStackTrace();
		}
 
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Leer matriz de un archivo texto

Publicado por Johan Medina (2 intervenciones) el 29/01/2020 06:44:41
Muchas Gracias de gran utilidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar