StringTokenizer

19 respostas
K

Pessoal, preciso criar um programinha em java que leia um arquivo TXT de um FTP (ftp://ip/arquivo.txt) e tratar as informações e jogar em um banco de dados.

Não sei como fazer isso, alguém poderia me auxiliar ou dar uma luz de como começar?

Grato,
kim0

19 Respostas

K

Em vez de utilizar StringTokenizer, utilize o método substrig da classe String.

É mais rápido e prático.

veja exemplo no desafio 28 - 1 da mundo java:

http://www.mundojava.com.br/edicao0002/desafios.shtml

K

eu preciso filtar um arquivo txt, linha a linha e pegar determinadas string nas linhas…

como faria isso com substring? varrer linha a linha? ou existe outro metodo para fazer isso?

grato,
kim0

K

Desculpe… tinha entendido errado. Nesse caso o método substring não seria o mais indicado.

Segue um exemplo para ler um arquivo de texto, varrer linha e separar a linha em pedaços menores.

File file = new File("c://registro.txt");

FileReader reader = new FileReader(file);
BufferedReader leitor = new BufferedReader(reader);
 		
String linha;
String idArq = "";
String nome = " ";
String nomeArq = "";
 		
StringTokenizer separador;

do
{
     linha = leitor.readLine();
     if( linha != null )
     {
          separador = new StringTokenizer(linha, "=");
          idArq = separador.nextToken();
          nomeArq = separador.nextToken();

          System.out.println(idArq);
          System.out.println(nomeArq);

     }

}while ( linha != null );
 		
leitor.close();
reader.close();

Este é um exemplo com StringTokenizer, pesquisa sobre o método split da clase String, esse sim é mais eficiente que StringTokenizer.

K

tentei rota o código, porém não exibi nada…

a string nome foi declarada, mas nao foi usada…

esta correto?

P

quando preciso de uma parte específica da sring…
eu uso o metodo substring… olha só

String x = "";
String y = "Bem vindo ao GUJ!!!"

 x = y.substring(0,2);

agora nao lembrose se escreve substring() ou subString()
olha vc no java doc pq eu to sem tempo!!^^

nesse caso x receberá a parte de y que confere com o endereço passado
para o método substring…
no caso sera o “Bem”, ok?? espero que a dúvida fosse isso.

K

pmsoad:
quando preciso de uma parte específica da sring…
eu uso o metodo substring… olha só

String x = "";
String y = "Bem vindo ao GUJ!!!"

 x = y.substring(0,2);

agora nao lembrose se escreve substring() ou subString()
olha vc no java doc pq eu to sem tempo!!^^

nesse caso x receberá a parte de y que confere com o endereço passado
para o método substring…
no caso sera o “Bem”, ok?? espero que a dúvida fosse isso.

Bem… eu também tinha entendido a dúvida dessa forma, mas no caso dele acredito deseje quebrar uma linha em pedaços menores, mas não sabe exatamente o tamanho desse pedaço, quem vai dividir a string é um caractere separador.

Nesse caso o ideal é usar StringTokenizer ou melhor ainda, o método split da classe string.

K

Na verdade… existem várias linhas do tipo da que esta abaixo:

BSPOT5 BW 15 2780 2127 12414 4052 476 156 855 320 0
BSPOT5 BW 15 2780 2127 12414 4052 476 156 855 320 0
BSPOT5 BW 15 2780 2127 12414 4052 476 156 855 320 0

Eu preciso que rode linha por linha e jogando em um vetor por exemplo ou uma variavel somente os campos BSPOT5, 320 e 0…

O arquivo é um TXT que contém tudo isso…

Tem como usar o StringTokenizer para filtrar linha por linha e ai eu jogar as string chave em um vetor…

O substring é bom… da pra usar, mas o token é mais prático… pois ele filtra por espaço em braco cada string… ai fica mais fácil, porém não estou conseguindo construir…

Será que rola alguma coisa?

Agradeço pela ajuda até o momento…

K

Bem… o exemplo de código que te passei lá em cima faz exatamento isso. Lê linha por linha do arquivo, e joga em uma variável os tokens do no exemplo que te passei são separados por “=” vc só deve mudar para o caractere separador ser um espaço " "

K

blz cara… agora rodou exatamente como eu quero, porém… quando tem espaços em branco, uma linha em branco ele para o comando ali…

por exemplo:

antes de começar o código abaixo existem 3 linhas em branco, ai o resultado nao sai nada… existem varias linhas em branco…
igual esta abaixo, um exemplo

BSPOT5 BW 15 2780 2127 12414 4052 476 156 855 320 0

BCTAT5 BW 10 17 14 43 31 0 0 0 30 0

nao tem como mandar filtrar tudo? inclusiva as em brancos… linha linha, quando for em branco, pular, sei la…

fogo esse comando, nao manjo…

valeu pela ajuda ateh agora…

P

import javax.swing.;
import java.io.
;

public class file {

private BufferedWriter bw;
private BufferedReader br;
String a = "";
String b = "";
String c = "";

public file(String recebe) {
    
    try{
        
        bw = new BufferedWriter(new FileWriter(recebe));
        br = new BufferedReader(new FileReader("caminho e nome do arquivo que quero escrever"));
        a = br.readLine();
        while(a.length()>1){
            b = a.substring(0,0); //nesses 2 parentesa vao a parte da linha
            c = a.substring(0,0); //que voce deseja guardar
            
            bw.write(a+c);
            a = br.readLine();
        }
        br.close();
        bw.flush();
        bw.close();
    }catch(Exception e) {
        
        System.out.println(e);
        System.out.println("Erro ao manipular arquivo!");
        JOptionPane.showMessageDialog(null, "Erro ao manipular arquivo!", "Advertência", JOptionPane.WARNING_MESSAGE);
        e.printStackTrace();
    }
}

}

K

Deu erro na linha " public file(String recebe) {"
erro: invalid method declaration; return type required

valeu pela ajuda… aguardo resposta!

P

o arquivo além de precisar chamar-se file, pra funcionar
o método precisa receber d outra classe uma string como parametro, entende??

e esse parâmetro precisa ser o caminho e o nome do arquivo de entrada…

K

Blz… valeu pela ajuda…

Agora vou correr atras pra rodar corretamente como eu quero!!!

P

eu dei uma editada agora no pos to código…
eu já compilei aki e funcionou…

vo continuar acompanhando o topico, se precisar de ajuda ou tiver duvida posta d novo…

K
Na linha

br = new BufferedReader(new FileWriter(file.txt));

aprensta o erro: cannot find symbol constructor BufferedReader(java.io.FilWriter)
E na linha

bw.write();

apresenta o erro: cannot find symbol method write()

o que seria?

S

Opa, nao sei se é isso que vc está precisando, mas se tratando de um txt com leitura de linhas e fazendo a quebra dessa linha eu faço dessa forma:

public static void getTabela(){ //um nome para o seu metodo
    try{

            File f = new File("C:/Tabela.csv"); //caminho, que vc coloca o que vc quiser

            if ( f.exists() ){

                    FileReader fr = new FileReader( f );
                    BufferedReader leitor = new BufferedReader(fr);
                    String linha;
                    leitor.readLine();
                            do{
                                    linha = leitor.readLine();
                                    if (linha != null){
                                            String[] teste = linha.split(";"); //quebra da linha, jogando o encontrado em um vetor
                                    modeloTabela.addRow(teste); //aqui eu adiciono o vetor encontrado em uma tabela, vc pode fazer o que quiser
                                    } 	
                        }while(linha!=null);
                            leitor.close();
                    }	
    }
    catch(IOException ex){
            System.out.println("Problema ao iniciar o arquivo");
    }
    }

Se for algo do tipo, espero ajudar, se nao vamos conversando.

R

Buenas tardes,
já foi resolvido o problema?

R

ola

eu tenho de ler um ficheiro e imprimir

1 ; 96123456 ; John Smith ; Rua de Cima ; 253987654 ; hipertens?o
3 ; 96234567 ; Maria Fatima ; Rua de Baixo ; 253876543 ; hipotens?o
4 ; 96345678 ; Maria Luisa ; Avenida Central ; 253765432 ; RC alto
5 ; 96456789 ; Manuel Luis ; Pra?a Comercio ; 253654321 ; RC baixo

como posso imprimir em linhas separadas o que esta separado de ";"

tenho este codigo ate agora

comprimentos

view plaincopy to clipboardprint?

import java.io.*;    
        
       public class Dados{    
       public static void main(String[] args){    
       try {    
       BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));    
       String str;    
       while((str = in.readLine()) != null)    
       {    
       if(str.startsWith("#"))    
       {    
       str= "";    
       }    
       else{    
        
        
       System.out.println(str);    
       }    
       }    
       in.close();    
       }    
       catch (IOException e){    
       // possiveis erros são tratatos aqui    
       }    
        
       System.exit(0);    
       }    
       }
R

ola

eu tenho de ler um ficheiro e imprimir

1 ; 96123456 ; John Smith ; Rua de Cima ; 253987654 ; hipertens?o
3 ; 96234567 ; Maria Fatima ; Rua de Baixo ; 253876543 ; hipotens?o
4 ; 96345678 ; Maria Luisa ; Avenida Central ; 253765432 ; RC alto
5 ; 96456789 ; Manuel Luis ; Pra?a Comercio ; 253654321 ; RC baixo

como posso imprimir em linhas separadas o que esta separado de ";"

tenho este codigo ate agora

comprimentos

import java.io.*;      
      
   public class Dados{      
   public static void main(String[] args){      
   try {      
   BufferedReader in = new BufferedReader(new FileReader("conteudo.txt"));      
   String str;      
   while((str = in.readLine()) != null)      
   {      
   if(str.startsWith("#"))      
   {      
   str= "";      
   }      
   else{      
      
      
   System.out.println(str);      
   }      
   }      
   in.close();      
   }      
   catch (IOException e){      
   // possiveis erros são tratatos aqui      
   }      
      
   System.exit(0);      
   }      
   }
Criado 24 de maio de 2006
Ultima resposta 6 de jun. de 2011
Respostas 19
Participantes 6