Olá denovo,
Estou com uma dúvida quanto à leitura de arquivos. Eu quero saber se tem uma maneira de eu ler um arquivo txt que contém uma matriz e jogá-la em uma variável do tipo double[][]. E se é possível identificar mais de uma matriz no mesmo arquivo txt (depois de uma linha em branco por exemplo).
Por exemplo, digamos que o meu arquivo txt seja:
[quote]1.5 2.8 1.0
0.5 0.2 1.9
3.0 3.1 3.0
3.0 1.0 1.0
0.1 0.2 0.3
1.5 1.5 1.5[/quote]
Eu gostaria que o programa lesse este arquivo e colocasse essas duas matrizes em double a[][] e double b[][] (ou em um array de double[][], para que eu possa ler quantas matrizes eu quiser do mesmo arquivo, e não só duas).
Eu já peguei um exemplo na net de um método que lê arquivos e os imprime na tela, que está funcionando certo no meu programa. Só gostaria de saber como tratar isso que ele leu para jogar dentro das variáveis double[][]. Segue abaixo código do método que lê o arquivo que estou usando.
[code] public void lerArquivo(String arquivo) throws java.io.FileNotFoundException,java.io.IOException{
File file = new File(arquivo);
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
try {
fis = new FileInputStream(file);
// Here BufferedInputStream is added for fast reading.
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
// dis.available() returns 0 if the file does not have more lines.
while (dis.available() != 0) {
// this statement reads the line from the file and print it to
// the console.
System.out.println(dis.readLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
fis.close();
bis.close();
dis.close();
}
}[/code]
O que você irá ler são linhas de string, logo precisará fazer um parse (Double.parseDouble()) para transforma-las .
Para fazer isso que deseja é importante manter um padrão no arquivo, sendo que os números estão separados por um espaço e as matrizes por uma linha em branco.
Eu faria da seguinte forma:
String linha = dis.readLine();
//Separa a string conforme o separador informado
String[] split = linha.split(" ");
Assim no vetor eu tenho as strings com os números e usando o parse terei double, dessa forma:
for(int 1 = 0; i < split.length; i++){
double d = Double.parseDouble(split[i]);
}
Para que possa ler quantas matrizes quiser utilize uma lista: List<Double[][]> lista = new ArrayList<Double[][]>();
O restante da lógica deixo com você, qualquer dúvida posta ai.
Já descobri o problema. Eu havia definido o tipo de lista errado na classe executável =P
=======
Valeu pela ajuda maja! Me baseando no que você falou consegui pegar os dados do arquivo txt, separá-los em matrizes e guardar em um ArrayList.
Porém tenho uma dúvida. Os métodos que eu criei para a manipulação das matrizes, todos recebem como parâmetro variáveis do tipo double[][]. Como faço para pegar as matrizes do ArrayList para poder usar nos meus métodos.
Tentei assim mas nao funciona:
// A leitura do arquivo funciona normalmente.
ArrayList lista = reader.lerArquivo(arquivo);
//o método pTensorial do objeto oper recebe como parâmetros duas matrizes
//Exemplo: oper.pTensorial(a[][], b[][]);
oper.pTensorial(lista.get(1),lista.get(2));
Pelo que entendi falta definir o tipo do ArrayList como ArrayList<Double[][]>, pois como está ele te retornará tipos Object e seu método precisa de doubles ou fazer um cast quando chamar o get, o que não é muito recomendável.