Iniciar leitura de arquivo à partir de uma linha específica

5 respostas
R

Fala galera,

preciso ler um arquivo começando de uma linha específica. Eu procurei na net, e a única coisa que encontrei foi um “workaround” que chama o “readLine()” até que a linha na qual eu quero seja encontrada, e à partir daí, começa a utilizar normalmente as linhas lidas. Porém queria evitar essa gambi.

Alguma sugestão?

Abs.

5 Respostas

A

Acredito que você queira gravar o conteudo de um arquivo apartir de uma linha específica.
Talvez isso te ajude.

String endereco = //coloque o caminho do arquivo  que devera ser lido;
File file = new File(endereco);
buffer = new BufferedReader(new FileReader(file));
while (buffer.ready())
{
	if( buffer.readLine().trim().contains("coloque o texto especifico nesta parte") )
	{
		//salve aki as linhas que você precisa, eu recomendo usar um StringBuffer para o armazenamento temporario.
	}
}

espero que isso contribua para a solução do seu problema

A

Se cada linha do arquivo tiver um comprimento específico, você pode usar RandomAccessFile para ajustar o ponteiro pra posição que você quiser.

[]'s

E

Você pode usar as classe Pattern e Matcher, respectivamente.

O Pattern você decide o que quer buscar dentro de um documento, String…

O Matcher você vai realizar a busca desta Pattern dentro da respectivo documento/String…

Isto chamamos de Expressões Regulares.

Um exemplo:

//String exemplo.
String string = "Receber ajuda não significa que você fracassou, mas sim que existem pessoas que torcem querem o seu sucesso";

//Aqui eu vou inserir exatamento o que desejo buscar dentro da minha string. No caso a palavra 'ajuda';
Pattern ptrn = Pattern.compile("ajuda");

//Aqui eu realizo a busca dentro da minha String. 
Matcher mtchr = ptrn.matcher(string);

//Este while faz uma busca no documento para achar a plavra.
while(mtchr.find()){
   System.out.println(string.subtring(mtchr.start(), mtcher.end());
   //mtcher.start, traz a recorrencia inicial da palavra dentro do documento, por exemplo 37.
  //mtchr.end(), traz a recorrencia final da palavra dentro do documento, por exemplo 43.
  //O método substring se encarrega de unir isso para você e montar a plavra desejada.

Mas você pode se perguntar como isso me ajuda.

Pegue a ultima recorrencia da palavra que vc quer. Por exemplo ‘dedo’, ao inves de usar o método .start() para pegar o primeiro inteiro, use o .end(), para pegar o ultimo, e prosseguir a partir dele.

Com isso você poderá pegar toda a string que estiver após o final da palvra que você procura.

Espero que possa ter ajudado.

Sem mais.

M

então… certa vezeu precisei exatamente disso, ler o conteúdo de uma linha especifica de um arquivo, mais especificamente era uma página html… lembro que pesquisei e não encontrei nada relativo a isso, tinha que ler linha a linha até chegar na que eu queria (no caso era algo do tipo cento e sessenta e alguma coisa).

no caso do que o asaudate falou, com o RandomAccessFile (que infelizmente não era o meu caso) , int, int)] você pode acessar a partir do byte “x” por exemplo… se o seu arquivo contém sempre o mesmo tamanho das linhas como muitas vezes acontece em remessas por exemplo você pode calcular o byte de onde vai começar… por exemplo, se seu arquivo sempre tem 400 caracteres por linha e você quer a decima linha, você pode usar o método do link passando 4000, 400 nos dois últimos parâmetros e um array para ser preenchido no primeiro.

espero ter ajudado.

R

Alex Scharf, edu_fernandes,

obrigado por me mandarem os códigos, mas não é exatamente o que eu preciso. Eu tenho um BufferedReader e através dele eu “itero” o seu buffer linha-à-linha até que o “readLine()” me retorne null. Porém, para iterar um BufferedReader, eu preciso sempre iniciar da primeira linha, e no meu caso, preciso de alguma maneira saber em qual byte do arquivo inicia a linha que eu quero, e à partir daí começar essa “iteração” .

maior_abandonado, asaudate,

vou testar a sugestão do RandomAccessFile e depois posto o resultado aqui.

Valeu galera!

Criado 14 de novembro de 2011
Ultima resposta 14 de nov. de 2011
Respostas 5
Participantes 5