Lendo Arquivo e usando expressao regular?

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

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

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

é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???

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)

[quote=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)[/quote]
perfeito mesmo… vlw mesmo cara…

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 regular…tipo, quero que meu email aceite dominios .com, .com.br e .org
se eu fizer String domainMask = “[.org][.com][.com.br]”;
ele só 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???

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)

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)]

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

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, raphael@gmail.comomomo ou raphael@uol.com.brobrobobr retorna válido…
alguem saberia como eu limitar o maximo para 3 caractere ja que nem o dominio nem o subdominio estrapolam 3 caracteres???

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

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.)

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

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

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

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

}