Ler matrizes de um arquivo txt e colocá-las em uma variável double[][]

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]

Obrigado desde já!

Vou te dar apenas dicas e não resolver seu exercício:

  1. Estude o método split da classe String e aplique em cada linha. Com base no resultado é com você popular sua matriz.
  2. Como você mesmo disse, no seu exemplo, depois da primeira, novas matrizes começam após linhas em branco

Abraço.

Bom dia!!!

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.

maja,

Vejo que é seu primeiro post, então aconselho uma lida neste artigo.

Utilizar as tags de formatação do fórum ajudam na legibilidade do seu post, principalmente códigos.

Abraço.

khaoz

Obrigado!!! Irei utilizá-los

EDIT

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.