I made an example for you using split to break the line spaces and save to an array and an switch to check if the name on each of the pieces equals one of the values of the switch and, if married, save in the variable room the value of the next piece, which is the corresponding value. Seeing the code below you will understand better.
I created a simple Java project with a package called lerarquivotxt and 3 files inside.
To start we create a Room object that will serve to store the values.
Java room.
package lerarquivotxt;
public class Sala
{
int numero,norte,sul,leste,oeste,cima,baixo;
// Construtor de sala vazia
public Sala Sala()
{
return this;
}
// Construtor com parâmetros para preenchimento
public Sala Sala(int room, int north, int south, int east, int west, int up, int down)
{
numero = room;
norte = north;
sul = south;
leste = east;
oeste = west;
cima = up;
baixo = down;
return this;
}
}
The second constructor of this class Room will not be used, but you can use it to test creating the objects by manually passing the parameters if you want.
The next file is an executable that will read the file and create room type objects and save them in the list.
Lerarquivotxt.java
package lerarquivotxt;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class LerArquivoTxt
{
public static void main(String[] args)
{
File f = new File("");
String caminhoarquivo = "src" + f.separatorChar + "lerarquivotxt" + f.separatorChar + "arquivotexto.txt";
//System.out.println("Caminho absoluto: " + f.getAbsolutePath());
System.out.println(f.getAbsolutePath() + f.separatorChar + caminhoarquivo);
// Lista que armazenará as salas
ArrayList<Sala> salas = new ArrayList<>();
Sala sala;
// Lê o arquivo que está no mesmo pacote
try
{
FileReader arq = new FileReader(f.getAbsolutePath() + f.separatorChar + caminhoarquivo);
BufferedReader lerArq = new BufferedReader(arq);
String linha = lerArq.readLine(); // lê a primeira linha
sala = linha2sala(linha);
salas.add(sala);
// a variável linha será igual a null ao chegar no fim do arquivo
while (linha != null)
{
linha = lerArq.readLine(); // lê da segunda até a última linha
if(linha!=null)
{
sala = linha2sala(linha); // converte linha em uma sala
salas.add(sala); // salva a sala na lista
}
}
}
catch (IOException e)
{
System.err.printf("Erro na abertura do arquivo: %s.\n",
e.getMessage());
}
// for each que exibe a lista de salas para demonstrar que está tudo correto
for(Sala minhasala : salas)
{
System.out.println(
"Sala: " + minhasala.numero + " \t " +
"Norte: " + minhasala.norte + " \t " +
"Sul: " + minhasala.sul + " \t " +
"Leste: " + minhasala.leste + " \t " +
"Oeste: " + minhasala.oeste + " \t " +
"Cima: " + minhasala.cima + " \t " +
"Baixo: " + minhasala.baixo
);
}
}
static Sala linha2sala(String linha)
{
Sala sala = new Sala();
// quebra os espaços e guarda num array para poder percorrer com um for
String[] pedacos = linha.split(" ");
int qtd = pedacos.length;
// percorre os pedacos q formavam a linha, setando valores da sala
for(int i=0; i<qtd; i++)
{
// se o pedaço é um nome, o próximo pedaço é o valor correspondente
switch(pedacos[i])
{
case "room":
sala.numero=Integer.parseInt(pedacos[i+1]);
break;
case "north":
sala.norte=Integer.parseInt(pedacos[i+1]);
break;
case "south":
sala.sul=Integer.parseInt(pedacos[i+1]);
break;
case "east":
sala.leste=Integer.parseInt(pedacos[i+1]);
break;
case "west":
sala.oeste=Integer.parseInt(pedacos[i+1]);
break;
case "up":
sala.cima=Integer.parseInt(pedacos[i+1]);
break;
case "down":
sala.baixo=Integer.parseInt(pedacos[i+1]);
break;
}
}
return sala;
}
}
Note: Just putting the file in the same folder and passing its name it was not being found, so I used a getAbsolutePath from an empty file and mounted the path. I don’t know if this is the best way to handle the file paths, but solved without problem. However I accept opinions on how this can be improved.
The third file is the list you passed. I took your image and converted it into text using an online OCR site, then included r n to break each line.
arquivotexto.txt
room 1 south 6 east 2
room 2 east 3 west 1
room 3 south 8 east 4 west 2
room 4 south 7 east 5 west 3
room 5 south 9 west 4
room 6 north 1 south 10 west 0
room 7 north 4 east 9 west 8
room 8 north 3 south 12 east 7 up 24
room 9 north 5 south 13 west 7
room 10 north 6 south 14 east 11
room 11 east 12 west 10 up 22
room 12 north 8 south 15 west 11
room 13 north 9 south 17
room 14 north 10 south 0
room 15 north 12 east 16 west 0 up 25
room 16 east 17 west 15
room 17 north 13 south 0 west 16
room 18 north 24 south 25 east 19 west 22 up 28
room 19 south 26 east 20 west 18
room 20 east 19
room 21 east 22
room 22 north 23 east 18 west 21 down 11
room 23 south 22 east 24
room 24 south 18 west 23 down 8
room 25 north 18 east 26 down 15
room 26 north 19 west 25
room 27 east 28
room 28 north 30 south 31 east 29 west 27 down 18
room 29 west 28
room 30 south 28
room 31 north 28
If this answer has helped you to solve your problem, give a moral accept it as an answer and click the triangle up to give also a +1.
That’s right, I’m finishing doing using this logic, I’m just reading the files with the scanner
– Rafael Scheffer