FileReader... ajudai

6 respostas
T

como posso fazer para ler um arquivo, cheio de dados, e capturar apenas os emails (por exemplo)… estou tentando usar Scanner filereader… mas naum estou conseguindo é justamente pegar a parte que eu quero, por exemplo, o teste seria +/- digitar varias coisas num arquivo txt e o java iria apenas separar os emails que estiverem escritos lá. se a pessoa não digitou nenhum email ([email removido])… não retornará nada.

6 Respostas

T

Use uma expressão regular para separar um email.

Por exemplo, digamos que em uma linha haja a seguinte informação:

Sergio da Silva ([email removido]), casado, dois filhos, residente à rua Almeida Ramos 450

Pegue a linha, procure um email dentro dela, e se houver, recupere-o. O seu problema não é com java.io.FileReader e sim com java.util.regex.Pattern e java.util.regex.Matcher.

Aqui no GUJ há alguns exemplos de expressões regulares para o email. Dê uma procuradinha…

T
import java.util.*;
import java.util.regex.*;

class SeparaEnderecosEmail {
	// Iremos aceitar na parte antes do "@": a-z, A-Z, 0-9, "!", "%", "-", "_", "."
	// Iremos aceitar na parte depois do "@": a-z, A-Z, 0-9, ".", "-"
	// Esta é uma simplificação: ver RFC 822 para uma versão mais completa.
	// Se precisar de uma versão que valide também se o email termina em ".com", ".br", ".gov", ".info", ".xxx" etc, 
	// esteja à vontade para modificar a expressão regular.
	private static final Pattern EMAIL_PATTERN = Pattern.compile ("[a-z0-9!%_.-]+@([a-z0-9-]+\\.)*[a-z0-9-]+", Pattern.CASE_INSENSITIVE);
	public static List<String> enderecosEmail (String linha) {
		List<String> enderecos = new ArrayList<String>();
		Matcher mat = EMAIL_PATTERN.matcher (linha);
		while (mat.find()) {
			enderecos.add (mat.group());
		}
		return enderecos;
	}
    public static void main(String[] args) {
		String[] linhas = {
			"Linha sem endereços de e-mail", // imprime vazio
			"Esta [email removido] de e-mail", // imprime "[email removido]"
			"Esta linha [email removido] e@mail", // imprime "[email removido]" e "e@mail"
			"veja que os acentos inter@ferem@com os ende@reços de email", // imprime "inter@ferem" e "ende@re"
			"[email protected]" // imprime "e!entertainment.television.com"
		};
		for (String linha : linhas) {
			System.out.println (enderecosEmail (linha));
		}
	}
}
T

ok… mas para buscar issu dentro de um arquivo já existente… a pessoa digitou os dados num txt por exemplo… eu quero buscar somente o email dela que está dentro desse txt…

T

digitando na linha, deu certo… mas o problema é ele bsucar um arquivo txt e fazer igual ao que ele faz na linha, que é justamente ignorar as partes que não são email. tem como?

T

Rode o programa que eu postei. Você vai ver que ele faz exatamente o que você pediu :stuck_out_tongue:

T
File file = new File("C:\\arquivo.txt");
 FileReader fr = new FileReader(file);
 BufferedReader bf = new BufferedReader(fr);

             while (bf.ready()) {

	 String line = bf.readLine();

pra pegar o arquivo e ler ele

Criado 19 de fevereiro de 2008
Ultima resposta 19 de fev. de 2008
Respostas 6
Participantes 2