Lendo Arquivo e usando expressao regular?

14 respostas
R
Pessoal, gostaria de dicas para transformar um arquivo lido em String. ja li o tutorial do guj sobre arquivos mas nao consigo ainda assim fazer... meu codigo.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Teste {

	public static void main(String[] args) throws IOException {
		
		//File arquivo = new File("c:/Downloads/temp.txt");
		
		FileReader arquivo2 = new FileReader(new File("c:/Downloads/temp.txt"));
		BufferedReader leitor = new BufferedReader(arquivo2);
		
		String linha = leitor.readLine();
		}
}
ai, ele só ler uma linha, mas nao sei como fazer ele pra ler as restantes... ou teria forma de ja transformar todo o texto em String?

14 Respostas

Ismaels

Coloca isso em um laço, enquanto a linha for diferente de null ele continua lendo.

String linha = “”;

while((linha = leitor.readLine()) != null){

//faça alguma coisa com a linha aqui

}

Espero ter ajudado…

Ismael Stahelin

R

érfeito ismael
erro bobo, mas vc me consertou :smiley:

tenho outra duvida se vc ou alguem puder me esclarecer…
Estou fazendo assim
ArrayList partes = new ArrayList

porem o eclipse da o erro
Multiple markers at this line
- The type ArrayList is not generic; it cannot be parameterized with arguments

- Syntax error, parameterized types are only available if source level is 5.0

alguem sabe o porque? só podemos usar o operador <> com classes que criamos???

Ismaels

Clica com o botão direito em cima do projeto. Vá em propriedades e depois Java Compiler. Clique em Enable project specific settings e ajuste o compliance level para 5.0.
O erro ocorre porque os fontes estão setados para a versão 1.4 do Java, que ainda não tinha Generics.
8)

R

Ismaels:
Clica com o botão direito em cima do projeto. Vá em propriedades e depois Java Compiler. Clique em Enable project specific settings e ajuste o compliance level para 5.0.
O erro ocorre porque os fontes estão setados para a versão 1.4 do Java, que ainda não tinha Generics.
8)

perfeito mesmo… vlw mesmo cara…

R

Ismael, aproveitei e fui ler a API do java pra entender melhor sobre a classe Pattern e entendi coisas que ficava voando. como a-zA-Z…
porem uma coisa que nao entendi nem a pau foi a função do sinal de soma, subtração e multiplicação como no caso de nome e dominio, que basicamente diferencia no final no sinal de + e o outro no sinal de *…
poderia explicar essa aqui tb [\.|\-|_] ???

Aproveitando o embalo, gostaria de ajuda de como fazer uma logica para compilar a expressao regulartipo, quero que meu email aceite dominios .com, .com.br e .org

se eu fizer String domainMask = [.org][.com][.com.br];

ele  retorna true se for .org .com ou .com.br retorna false (mas essa sintaxe nao é de uniao???)

a validação pro nome e pro nome do servidor estao corretas agora nao tou conseguindo restringir o nome de dominio para aceitar os tipos que eu quiser alguem sabe como me ajudar???
Ismaels

Aí você está dizendo que quer um domínio .org.com.com.br e isso com certeza não existe não é mesmo?! Tenta isso: “.org | .com.br | .com” acho que isso deve funcionar, testa e me avisa. 8)

antoniopopete

Tenta [(.org)(.com)(.com.br)] na expressão regular…Mas cuidado porque o . = qualquer coisa…Acho que se quer fazer uma expressao para validar email deve ser:

[a-zA-Z0-9]@[a-zA-Z][(.org)(.com)(.com.br)]

R

vlw pelo pessoal, mas nenhum dos 2 casos funcionou… continua retornando FALSE…
no caso do ismael, dava erro ao usar .com dava erro de INvalid Escape Sequence… ai coloquei \.com mas tb nao funcionou… :frowning:

alguem tem mais alguma dica???

e sobre o +, - e *… o que isso significa???

R

PEssoal, na base da tentativa e erro(muito erros :P)
fiz o comando String domainMask = “[(\.org)|(\.com\.br)|(\.com)+]+”; e funcionou :smiley:
porem alguem me explica a função do sinal de * e do sinal de +, principalmente o + repetido no final da String???

editado:
nem tudo é alegria…ele funciona normal 50% apenas… se tiver qualquer outro caractere diferente ele retorna false…mas se tiver .co ou .or ele retorna true pq essa parte da String esta inclusa no total :frowning:

se for dificil regular o dominio assim, ajudaria se alguem me ensinasse a eu limitar a quantidade de caractere maxima também…
por exemplo, do jeito que esta, um email do tipo, [email removido] ou [email removido] retorna válido…
alguem saberia como eu limitar o maximo para 3 caractere ja que nem o dominio nem o subdominio estrapolam 3 caracteres???

antoniopopete

O * significa 0 ou mais vez e o + pelo menos 1 vez…

T

Esta expressão regular está com problemas.
Se você quiser pegar:

.org, .com.br, .com apenas, a expressão é apenas:

“(?i)[a-z0-9.-]+(\.org|\.com\.br|\.com)”

onde:
(?i) = ignore a diferença entre minúsculas e maiúsculas
[A-Z0-9.-]+ = qualquer coisa que tenha letras, dígitos, ponto e traço
(\.org|\.com|\.com\.br) = alguma das seguintes alternativas (|): .org, .com, .com.br

(Você não aceita caixa.gov.br? Que expressão regular restritiva demais. Eu em particular não gosto de bater a última parte para email; eu prefiro só contar o número de pontos. Se houver mais que um ponto, está OK.)

R

thingol:
Esta expressão regular está com problemas.
Se você quiser pegar:

.org, .com.br, .com apenas, a expressão é apenas:

“(?i)[a-z0-9.-]+(\.org|\.com\.br|\.com)”

onde:
(?i) = ignore a diferença entre minúsculas e maiúsculas
[A-Z0-9.-]+ = qualquer coisa que tenha letras, dígitos, ponto e traço
(\.org|\.com|\.com\.br) = alguma das seguintes alternativas (|): .org, .com, .com.br

(Você não aceita caixa.gov.br? Que expressão regular restritiva demais. Eu em particular não gosto de bater a última parte para email; eu prefiro só contar o número de pontos. Se houver mais que um ponto, está OK.)


nao, eu irei fazer um conjunto grande… eu coloquei só os tres exemplos para nao ficar muito grande pq eu consigo validar corretamente pro .com, .com.br e .org para qualquer outro o raciocinio é o mesmo…:slight_smile:

D

Raphael,

Voltando ao assunto de transformar arquivo de texto em String, a partir do java 1.5 vc pode usar a classe Scanner pra isso, não só arquivos como Strings tbem.

Seu código ficaria:

try
{
    File arquivo = new File("arquivo.txt");
    Scanner input = new Scanner(arquivo);
    String linha;
    while(input.hasNextLine())
    {
        String linha = scanner.nextLine();
        System.out.println(linha);
    }
}
catch (IOException e) 
{
    e.printStackTrace();
}

Espero ter ajudado de alguma forma.

[]'s

G

Olá pessoal,

Estou tentando rodar um código exemplo mas tá aparecendo o seguinte erro: "Multiple markers at this line …

  • RandomAccessrafile cannot be resolved to a type
  • RandomAccessrafile cannot be resolved to a type"

eu tentei verificar se tinha algum post aqui com erro parecido mas nao achei…alias achei mas não adiantou(sobre o compliance level)

vejam o código abaixo… desde já agradeço galera…!

import java.io.*;

public class meuFile {

public static void main(String args[]) {

File arq = new File(C:\texto.txt);

RandomAccessrafile raf = new RandomAccessrafile( arq, rw);
//gravando dados no arquivo
	raf.writeUTraf("saldo=");
	raf.writeDouble(100.0);
	//lendo a partir da posição inicial
	raf.seek(0);
	String txt = raf.readUTraf();
	double saldo = raf.readDouble();
	raf.close();
	
}

}

Criado 16 de junho de 2007
Ultima resposta 22 de mar. de 2009
Respostas 14
Participantes 6