• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Louise

Ler uma determinada linha do ficheiro

10 mensagens neste tópico

Eu precisava de ler uma determinada linha do ficheiro fiz

            FileReader ler = new FileReader("Novo.txt"); 

            LineNumberReader line = new LineNumberReader(ler); 

            line.setLineNumber(2); //escolho a linha 2

            System.out.println(line.readLine()); // imprime a linha 1

Bigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nunca usei essa classe alias isso para mim é novidade lol.

Mas realmente o código parece bem segundo a API.

Tenta meter outros números no setLineNumber e depois faz gets para ver os resultados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu por aki nao consigo chegar lá.

O problema é o seguinte: O ficheiro é muito grande e nao consigo manter todo em memoria entao keria ir lendo apenas as linhas k preciso.

Existe alguma forma de fazer isso????

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:S é complicado podes mostrar um excerto do ficheiro pode ser que dê alguma ideia de como processar isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto responde ao teu problema porque isso não funciona.

The LineNumberReader class has two methods pertaining to line numbers. The getLineNumber() method returns the current line number. If you want to change the current line number of a LineNumberReader, use setLineNumber(). This method does not affect the stream position; it merely sets the value of the line number.

import java.io.LineNumberReader;
import java.io.FileReader;

public class Leitor{

public LineNumberReader line;

public Leitor() throws Exception {
	this.line = new LineNumberReader( new FileReader("Novo.txt") );
}


public static void main(String args []){

	try{
		Leitor l = new Leitor();

		int linha = 3;

		if(linha-1 < l.line.getLineNumber()){
			l.line.reset();
		}

		while( l.line.getLineNumber() != linha-1){
			l.line.readLine();
		}
		System.out.println(l.line.readLine());
	}
	catch(Exception e){
		System.err.println(e.getMessage());
	}
}

}

Isto é uma solução 1 bocado a martelo mas faz +- o que queres embora acredito que não seja a melhor opção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bigada. Ta a funcionar.

Sinceramente nao tou a ver uma alternativa melhor. Carregar tudo em memoria so kom arrays nativos é k aguenta.

Bjs

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a perceber porque é que terias de carregar tudo para memória. Uma intância da classe File não representa um ficheiro mas apenas um nome de um ficheiro que pode ou não existir, nada do ficheiro é carregado para memória. Se usares uma stream, apenas os dados que ocuparem o buffer usado é que estarão em memória, a não ser que o ficheiro seja muito pequeno, nunca vai estar todo em memória.

O processamento completo de um ficheiro grande poderá causar alguns problemas de velocidade, mas isso implicaria que por cada linha/palavra estarias a processar esse conteúdo, como não me parece que seja isso que esteja a acontecer, não consigo ver qualquer problema em ler o ficheiro todo e processar apenas o que interessa.

Se achas que terás problemas de performance então deverias estar a usar o package java.nio e não o java.io. Terias mais controlo sobre o que estás a ler e como estás a ler.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não estou a perceber porque é que terias de carregar tudo para memória. Uma intância da classe File não representa um ficheiro mas apenas um nome de um ficheiro que pode ou não existir, nada do ficheiro é carregado para memória. Se usares uma stream, apenas os dados que ocuparem o buffer usado é que estarão em memória, a não ser que o ficheiro seja muito pequeno, nunca vai estar todo em memória.

O processamento completo de um ficheiro grande poderá causar alguns problemas de velocidade, mas isso implicaria que por cada linha/palavra estarias a processar esse conteúdo, como não me parece que seja isso que esteja a acontecer, não consigo ver qualquer problema em ler o ficheiro todo e processar apenas o que interessa.

Se achas que terás problemas de performance então deverias estar a usar o package java.nio e não o java.io. Terias mais controlo sobre o que estás a ler e como estás a ler.

Boas.

Eu tenho de fazer um tipo de gps usando os mapa que estão no ficheiro.  Depois com os dados lidos tenho de aplicar o algoritmo Dijkstra. Embora eu seja uma novata em java axo k tenho de ter os dados em memoria pra aplicar o algoritmo.

Pelo o k eu percebi do ficheiro eu tenho de ir aos no de chegada e ir tirando os vizinhos ate chegar ao no de origem.

Como isto esta um pouco confuso se preferires posso mostrar o enunciado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse caso o problema não está em ler o ficheiro, mas sim e encontrar uma forma optimizada para ter os dados que precisas em memória. Parece-me que estás a tentar resolver um problema que não existe, o de memória consumida a ler o ficheiro.

Não sei bem que ideia tens para a resolução do problema, mas no que toca a leitura de ficheiro não haveria qualquer problema de consumo de memória, e foi apenas esse ponto que foquei. Estavas a ter dificuldades a fazer algo que não precisavas fazer :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora