Jump to content

Ler uma determinada linha do ficheiro


Louise
 Share

Recommended Posts

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

Link to comment
Share on other 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.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other 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????

Link to comment
Share on other 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.

I haven’t lost my mind; it’s backed up on DVD somewhere!

Link to comment
Share on other 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.

Link to comment
Share on other 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

Link to comment
Share on other 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 🙂

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.