Como faço para pegar um arquivo de texto e transformá-lo em um array 2D em Java?

Eu tenho um arquivo de texto, é o seguinte:

1 1 1 0 0 0 1 0 0 0 1 0 0 9 1 0 

Eu quero ler isso e transformá-lo em um array 2D, linha por linha. Primeiro usei BufferedReader e FileReader, depois os transformei em matrizes unidimensionais. Eu quero adicionar meus arrays unidimensionais para serem adicionados ao meu array 2D. Aqui está o meu código:

  BufferedReader br = new BufferedReader (new FileReader ("num.txt")); String line; char[][] maze = new char[8][8]; while ((line = br.readLine() ) != null ){ char[] row = line.toCharArray(); int x = 0; for (int i = 0; i < row.length; i++) { maze[x][i] = row[i]; System.out.print(maze[i]); System.out.printf("%n"); x++; } } 

Eu estou tentando obter matriz 2D porque eu vou verificar as coordenadas mais tarde. Então eu quero que as linhas do meu array 2D sejam determinadas por cada linha do arquivo de texto que eu tenho.
Mas a saída que recebo é a seguinte:

 1 1 1 0 0 0 1 0 0 0 1 0 0 9 1 0 

O que estou fazendo de errado?

Você deve colocar System.out.printf("%n"); fora do loop for . Como está dentro do loop for , imprime uma nova linha depois de imprimir todos os caracteres.

Deve ser assim

 while ((line = br.readLine() ) != null ){ char[] row = line.toCharArray(); int x = 0; for (int i = 0; i < row.length; i++) { maze[x][i] = row[i]; System.out.print(maze[i]); x++; } System.out.printf("%n"); //mention this } 

E mais uma coisa, incremento de x não afetará a seqüência de saída .

Um problema é que você está incrementando x dentro de seu loop for e redefinindo seu valor para 0 com cada iteração do loop while. Como você está usando essa variável para contar linhas, x++ na verdade pertence fora do loop for (mas ainda dentro do while), e sua boot para 0 pertence antes do início do loop while.

Um problema similar existe com esta declaração, System.out.printf("%n"); . Você está imprimindo isso para cada iteração do loop for, portanto, você está obtendo uma nova linha entre cada caractere. Mesmo que x acima, mova essa instrução para fora do loop for (mas ainda dentro do while).

  int x = 0; while ((line = br.readLine() ) != null ) { char[] row = line.toCharArray(); for (int i = 0; i < row.length; i++) { maze[x][i] = row[i]; System.out.print(maze[i]); } System.out.printf("%n"); x++; } 
 BufferedReader br = new BufferedReader(newInputStreamReader(System.in)); char[][] arr = new char[4][4]; int i,j; for (i=0; i<4; i++) { String[] str1=br.readLine().split(" "); for (j=0; j<4; j++) { arr[i][j] = str1[j].charAt(0); } } for (i=0; i<4; i++) { for (j=0; j < 4; j++) { System.out.print(arr[i][j]+" "); } System.out.println(); }