StringTokenizer

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

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

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

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.

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

a string nome foi declarada, mas nao foi usada…

esta correto?

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.

[quote=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.[/quote]

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.

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…

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 " "

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…

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();
    }
}

}

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

valeu pela ajuda… aguardo resposta!

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…

Blz… valeu pela ajuda…

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

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…

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?

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.

Buenas tardes,
já foi resolvido o problema?

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?

[code] 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);    
   }    
   }    [/code]

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

[code]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);
}
}[/code]