Listar las N ultimas lineas de un fichero

sal00m
14 de Febrero del 2005
Como se pueden listar las N primeas lineas de un fichero?? Es que tngo un fichero que es gigantesco y necesito listar solo las ultimas lineas, necesitaria algo parecido al "tail" de unix/linux

Dorofo
14 de Febrero del 2005
Hay un ejemplo de sacar las lineas de un fichero. en una pregunta de este foro.

Soy nuevo en java asi que no cuento con eperiencia y si tomaramos el ejempla anterior, haria una funcion que recibiera el numero de linea inicia y final que quiero mostrar.

el codigo es al go asi

String linea;

while(linea !=null){
lee linea

.. has lo que quieras

}
yo haria un if o algo asi para ver si es una linea que quiero si lo es la concateno a la Strin y si no pues sigo leyendo y salgo del ciclo con un break en el if para que ya no siga leyendo las demas lineas y ahora ya tengo una string que contiene las lineas que necesito.

Nota ve el codigo que pusieron para leer linea por linea.

Lemony Snicket
14 de Febrero del 2005
Hola,...

Así a bote pronto se me ocurre esto,...

public static void main(String args[]){
try{

String nomFichero=null;
int maxLinMostradas=0;
if (args.length==2){
nomFichero=args[0];
maxLinMostradas= Integer.parseInt(args[1]);
leeFicheroN(nomFichero,maxLinMostradas);
}else{
System.out.println("Faltan argumentos");
}
}catch(IOException e){
System.out.println("ERROR!-:"+e);
}


public static void leeFicheroN(String fichero, int maxLinMostradas) throws IOException{

FileReader fr= new FileReader(fichero);
BufferedReader br= new BufferedReader(fr);
String linea=null;
int numLin =0; // Número de líneas del fichero
int linInicial=0; // Primera línea mostrada

while ((linea=br.readLine())!=null){
numLin++;
}
br.close();

System.out.println("Número líneas fichero:"+numLin);
System.out.println("Máximo número mostradas"+maxLinMostradas);

// Calculamos primera línea mostrada
linInicial = numLin-maxLinMostradas;
System.out.println("Linea Inicial:"+linInicial);

// Volvemos a leer mostrando sólo lo requerido
FileReader fr2= new FileReader(fichero);
BufferedReader br2 = new BufferedReader(fr2);
numLin=0; // Línea actual

while ((linea=br2.readLine())!=null){
// Si el número de líneas a mostrar es superioral número de líneas mostramos todas

if(numLin>=linInicial || linInicial<0){
System.out.println("Tail:"+linea);
}
numLin++;
}
br2.close();

}

}

Espero que te sirva. Un saludo.

Lemony Snicket
14 de Febrero del 2005
Hola,...

El código que he puesto lee las últimas N líneas de un fichero. Por tu mensaje inicial no queda claro si quieres esto o si quieres leer las N primeras... De todas formas no te costará adaptarlo...

Un saludo.