[RESOLVIDO] Arquivo .txt para uma matriz

Olá, caros companheiros. Boa noite a todos.
Não sei se nosso relacionamento já chegou a ponto de eu postar uma dúvida no meu primeiro post, rsrs, :D. Mas vamos lá.
O que eu quero?
Quero popular várias matrizes utilizando vários arquivos .txt, as coluna deste arquivo são separadas por um “|”, conforme exemplo:

|INF1|INF2|INF3|
|--------------------|
|L1C1|L1C2|L1C3|
|L2C1|L2C2|L3C3|
|L3C1|L3C2|L3C3|

|LNC1|LNC2|LNC3|
[size=9]Arquivo .txt[/size]
O que eu consegui?
Consegui popular um Array com todas as linhas do meu arquivo .txt. Por não conseguir criar uma matriz nem a partir do Array estou utilizando um método para separar uma String que eu informo:

Como fiz?

public class masters {
    
    ArrayList<String> ZDPR = new ArrayList<String>();
    public int ZDPR(){
        try{
            BufferedReader in = new BufferedReader(new FileReader("C:/ZDPRPL014.txt"));
            String str;

            while ((str = in.readLine())!=null){
                ZDPR.add(str);
            }
            in.close();
        }catch (IOException ioe){
         System.out.println(ioe);
        }
        return ZDPR.size();
    }
    public String getZDPR(int i){
        return ZDPR.get(i);
    }
    public String separaString(int coluna, String valor){
        String s[] = valor.split(Pattern.quote("|"));
        return s[coluna];
    }
}

[size=15]Segue o Main disso dai:[/size][code]
public static void main(String[] args) {
masters g = new masters();
int a = g.ZDPR();

    String Coluna 1 = g.separaString(0, g.getZDPR(45));
    String Coluna 2 = g.separaString(1, g.getZDPR(45));
    String Coluna 3 = g.separaString(2, g.getZDPR(45));

//Valores da linha 45 separado por coluna

[/code]
Problema:
Acredito que se eu conseguir popular uma matriz direto de um .txt, meu programa vai ter uma performance bem melhor, pelo fato de não precisar mais utilizar os métodos “separaString” e “getZDPR”.

Até fico meio envergonhado :oops: , porque achei um milhão de coisas sobre como manipular arquivos .txt. Mas é aquele negócio, quanto mais coisa você acha menos você aprende. Não custa nada perguntar né? :roll:

Da uma olhada.
No main chama o método chamada().

public class Masters {

    public void chamada() {         
        criaMatriz(loadArquivo());
    }

    private List<String> loadArquivo() {

        List<String> conteudo = new ArrayList<String>();

        try {
            BufferedReader in = new BufferedReader(new FileReader("C:\ZDPRPL014.txt"));
            String str;

            while ((str = in.readLine()) != null) {
                conteudo.add(str);
            }
            in.close();
        } catch (IOException ioe) {
            System.out.println(ioe);
        }

        return conteudo;
    }

    private String[][] criaMatriz(List<String> conteudo) {
        //pelo conteudo pego o n° dfe linhas para a matriz
        int linha = conteudo.size();
        int coluna = 0;

        //pego o n° de colunas da matriz pela 1ª linha
        if (conteudo.get(0).contains("|")) {
            String s = conteudo.get(0);
            for (int j = 0; j < s.length(); j++) {
                Character c = s.charAt(j);
                if (c.equals('|')) {
                    coluna++;
                }
            }
        }

        //como o n° de colunas eh 1 menos | vamos diminuir um na coluna
        coluna = coluna - 1;
        String[][] matriz = new String[linha][coluna];

        for (int i = 0; i < linha; i++) {
            for (int j = 0; j < coluna; j++) {
                matriz[i][j] = "";
                String s = conteudo.get(i);
                for (int x = 0; x < s.length(); x++) {
                    Character caracter = s.charAt(x);
                    if (!caracter.equals('|')) {
                        matriz[i][j] += caracter.toString();
                    } else if (x != 0 && j < coluna - 1) {
                        j++;
                        matriz[i][j] = "";
                    }
                }

            }
        }

        for (int i = 0; i < linha; i++) {
            for (int j = 0; j < coluna; j++) {
                System.out.print(matriz[i][j]);
            }
            System.out.println();
        }
        
        return matriz;
    }

}

Da pra melhor um pouco ou modificar a estrutura, dai é vc faz como preferir.

That’s gorgeus. :stuck_out_tongue: :stuck_out_tongue: :P;
Funcionou perfeitamente. Incrível esse negócio de percorrer caractere por caractere. :lol: .

Fiz somente algumas alterações no código para jogar no meu projeto, conforme segue:

Criei uma classe para guardar o código para armazenar os dados do .txt num Array;[code]
public class Conteudo {
public List loadArquivo(String File) {

    List<String> conteudo = new ArrayList<String>();

    try {
        BufferedReader in = new BufferedReader(new FileReader(File));
        String str;

        while ((str = in.readLine()) != null) {
            conteudo.add(str);
        }
        in.close();
    } catch (IOException ioe) {
        System.out.println(ioe);
    }
    HashSet hashSet = new HashSet(conteudo);        //Conjunto de dados para
    ArrayList conteudo1 = new ArrayList(hashSet);   //eliminar itens repetidos
    Collections.sort(conteudo1);                    //do Array criado

    return conteudo1;
}

}
[/code]
Uma outra classe que cria a matriz.[code]
public class CriaMatriz {
public String[][] criaMatriz(List conteudo) {
int linha = conteudo.size();
int coluna = 0;

    if (conteudo.get(0).contains("|")) {
        String s = conteudo.get(0);
        for (int j = 0; j < s.length(); j++) {
            Character c = s.charAt(j);
            if (c.equals('|')) {
                coluna++;
            }
        }
    }coluna--;

    String[][] matriz = new String[linha][coluna];

    for (int i = 0; i < linha; i++) {
        for (int j = 0; j < coluna; j++) {
            matriz[i][j] = "";
            String s = conteudo.get(i);
            for (int x = 0; x < s.length(); x++) {
                Character caracter = s.charAt(x);
                if (!caracter.equals('|')) {
                    matriz[i][j] += caracter.toString();
                } else if (x != 0 && j < coluna - 1) {
                    j++;
                    matriz[i][j] = "";
                }
            }
        }
    }
    return matriz;
}

}
[/code]
E finalmente o main que faz esta alegria toda acontecer 8) [code]
public static void main(String[] args) {

    String txt01 = "C:\Gestão\Tabelas\ZDPRPL014.txt";
    String [][] ZDPRPL014;//
    
    Conteudo conteudo = new Conteudo();
    CriaMatriz Matriz = new CriaMatriz();
    ZDPRPL014 = Matriz.criaMatriz(conteudo.loadArquivo(txt01));

}

[/code]
Valeu. Modifiquei da forma que melhor me cabia. Ainda não sei é a melhor, qualquer sugestão… por favor adoro pitacos, hehehe :-o . Outras alterações posto por aqui.
Valeuuuu.

Que bom que foi util a minha sugestão.

agora é isso mesmo, vai alterando conforme suas necessidades.