Como recuperar campos de um arquivo ".txt" e adicionar no banco de dados?

Estou tendo dificuldades em como desmembrar um arquivo .txt e salva-los em uma variavel para o banco. O processo de adicionar variáveis no banco eu ja sei como fazer porem a minha duvida seria em como desmembrar o .txt para add nas variáveis, supondo que oarquivo.txt venha conforme abaixo:

exemplo:

Arquivo.txt

Nome Idade Sexo Telefone Etnia
Joao 18 M 111111111 Branca
Maria 40 F 22222222 Amarela

Eu precisaria quebrar o .txt para adicionar em cada variavel, sabendo que eu precisaria tratar com um while pra varrer linha por linha, tipo: String nome = NomeDoCampo.txt ??

e se eu receber um arquivo zip, o processo seria o mesmo?

Opa @Baltrosk tudo beleza? Então não é um bicho de 7 cabeças, então lá vai sobre o que você deve estudar.

Prieiramente estude como ler um arquivo TXT. Segue um exemplo utilizando Java 8 (que creio que é o que tens baixado).

“Segundamente”, você deve definir um layout para o seu arquio txt, pois você ai utilizar recursos da classe String (fica como dever de casa pra você pesquisar) que é da API do Java. Para isso você precisará definir o tamanho de colunas que cada uma das informações terá no seu arquivo, pois se você tentar utilizar o espaço em branco como split, esse arquivo de exemplo que você deu vai funcionar, mas e se aparecer um nome completo como “ADRIANO MARTINS OHANA” em seu arquivo?

Logo o mais correto é você definir um layout pra poder trabalhar certinho com as colunas, facilitando até mesmo a validação das suas colunas no BD.

Enfim, se eu não tiver sido claro em algo é só falar e nós vamos conversando. Espero ter ajudado :wink:

Bom dia @adriano_si, tudo bem?

Cara agradeço pela força e o que realmente busco é isso, um caminho que devo seguir para conseguir atingir os objetivos! Irei dar uma estudada com o que voce me passou e darei um retorno com o codigo em mãos, tanto positivo quanto pra tirar duvidas novamente!

Agradeço por tudo e ate breve.

Como o amigo adriano_si falou você precisa separar bem as Colunas eu usaria o ’ ; ’ já que você provavelmente nunca usara ele Ex;

Joao;18;M;111111111;Branca
Maria;40;F;22222222;Amarela

Cada Coluna vai ser representada por um ;

Código abaixo, não testei mas tenho quase ctz que está funcionando
Não usei o Java 8 que o amigo la falou , não porque é pior, mas pelo falo de nunca telo visto até hoje quando o vi no comentário dele xD

//Nesse caso estou usando Array List para add
//cada linha

    List<String> listaDeLinhas = new ArrayList<String>();
    
    try{
        
        String caminhoDoTxt = "O Caminho do seu arquivo Ex: C:\\File.txt";

        InputStream is = new FileInputStream(caminhoDoTxt);
        InputStreamReader isr = new InputStreamReader(is , "UTF-8");
        BufferedReader br = new BufferedReader(isr);

        //Essa variavel vai ser responsavel por pegar cada linha do seu txt
        String linha = "";

        linha = br.readLine();

        //Quando a linha for nula é porque está no fim do arquivo
        
        while(linha != null){

            listaDeLinhas.add(linha);
            linha = br.readLine();

        }

        //Lembre sempre de fechar o leitor
        br.close();
    
        //Trate esses Erros
    }catch(FileNotFoundException ex1){
        
    }catch(UnsupportedEncodingException ex2){
        
    }catch(IOException ex3){
        
    }
    
    //Agora vamos pegar Cada linha e tratar
    //Vamos passar ela para um array e a partir dai voce se vira xD
    //Vou tratar a linha como se a separação fosse feita com ' ; '
    for(String string: listaDeLinhas ){
        
        //Esse metodo abaixo cria um array de palavras que foram
        //separadas pelo ' ; '
        //Ex: joao;25;2016;Rua X
        
        //o Array vai estar assim
        //String[] vetorString = {"joao","25","2016","Rua X"}
        //
        String[] vetorString = string.split(";");
        
        for (int i = 0; i < vetorString.length; i++) {
            System.out.println(vetorString[i]);
        }
                
    }

Amigos Adriano e Xore,

Fiz um teste de leitura de arquivo com ambas as dicas me passadas e ambas funcionaram, porem estou com problemas que provavelmente seja o UTF-8.

Mesmo utilizando no InputStreamReader, o arquivo vem desconfigurado.

Arquivo txt ------

Nome Idade Sexo Etnia Apelido

Rodrigo 29 M Amarela Sião
Gisele 27 F Branca Cachaça
Fulano 01 D Indefinido @amigo

Retorno: ------

run:

Nome Idade Sexo Etnia Apelido

Rodrigo 29 M Amarela Si�o
Gisele 27 F Branca Cacha�a
Fulano 01 D Indefinido @amigo

BUILD SUCCESSFUL (total time: 0 seconds)

Outra duvida, qual seria a função que eu deveria seguir para que eu consiga armazenar os valores de cada coluna, tipo: No banco de dados eu teria exatamente os mesmo dados das colunas, tais como: Nome, Idade, sexo, Etnia e Apelido e com os dados abaixos eu utilizaria um javabean para tal função?

PS: Aqui no meu trabalho, eu faço comunicacao com um email especifico da empresa, onde baixo o arquivo txt diariamente e salvo os dados no banco de dados. A comunicacao com o email e baixar o arquivo ja estou fazendo, agora com a ajuda de voces estou tambem ja lendo o arquivo, so preciso de um pequeno help para salvar cada valor em seus respectivos campos.

Novamente agradeço a ajuda de vocês!

Baltrosk no inputstreamReader voce colocou o “UTF-8” outra sempre dava erro para mim porque faça um pequeno teste crie um txt mas na hora de salvar como voce vai ver que na tela de salvar como vai aparecer do lado esquerdo do botao salvar codificaçao escolha o utf8 e test (Desculpe o Pt - Estou com preguiça de escrever bonitinho) kkkkkk

Caro xore, criei um novo arquivo .txt mas salvando como UTF-8 e funcionou normalmente, porem, eu irei receber os arquivos .txt sempre como ANSI.

No entanto, encontrei a solução onde, ao inves de colocar o “UTF-8”, modifiquei para: ISO-8859-1.

Funcionou perfeitamente!.

Segue o comando caso alguem precise:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package testes;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author rodrigo.morais
 */
public class LerArquivoDois {

    public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException, IOException {

        List<String> listaDeLinhas = new ArrayList<>();
        String caminhoDoTxt = "C://Users//rodrigo.morais//Desktop//Rodrigo//Java//Teste//Registro.txt";

        InputStream is = new FileInputStream(caminhoDoTxt);
        InputStreamReader isr = new InputStreamReader(is, "ISO-8859-1");
        BufferedReader br = new BufferedReader(isr);

        //Essa variavel vai ser responsavel por pegar cada linha do seu txt
        String linha = "";
        linha = br.readLine();

        //Quando a linha for nula é porque está no fim do arquivo
        while (linha != null) {
            //Grava cada linha lida na lista e le novamente a linha;
            listaDeLinhas.add(linha);
            linha = br.readLine();

        }

        //Lembre sempre de fechar o leitor
        br.close();

        //Agora vamos pegar Cada linha e tratar
        //Vamos passar ela para um array e a partir dai voce se vira xD
        //Vou tratar a linha como se a separação fosse feita com ' ; '
        for (String string : listaDeLinhas) {
            //Esse metodo abaixo cria um array de palavras que foram
            //separadas pelo ' ; '
            //Ex: joao;25;2016;Rua X

            //o Array vai estar assim
            //String[] vetorString = {"joao","25","2016","Rua X"}
            //
            String[] vetorString = string.split("/");
            for (String vetorString1 : vetorString) {
                System.out.println(vetorString1);
            }
        }

    }
}

No entanto galera, agora preciso de uma ajuda em como eu posso pegar os valores de cada coluna do .txt e salvar no Banco de Dados. Alguem pode me ajudar?

Agradeço

Baltrosk Infelizmente na questão do banco não tenho como te ajudar, até porque estou iniciando com Banco De Dados agora, e estou aprendendo usando Vba depois que vou passar para o java.

Mas creio eu que seria algo do tipo
Suponde que sua Tabela esteja assim


| Nome | Idade | Sexo | Telefone Etnia |


INSERT INTO nomeDeSuaTabela (NomeColuna1 , NomeColuna2 , NomeColuna3 , NomeColuna4) values (vetorString[0] , vetorString[1] , vetorString[2] , vetorString[2]) ;

Pensei que você já tinha noção de como add no BD. Você já conseguiu então retirar cada coluna de dentro das linhas?

Se sim, dê uma lida:

http://www.jooq.org/java-8-and-sql
https://docs.oracle.com/javase/tutorial/jdbc/overview/