Foros del Web » Programación para mayores de 30 ;) » Java »

Como leer la última línea

Estas en el tema de Como leer la última línea en el foro de Java en Foros del Web. Hola! se que quizá esta pregunta sería básica, pero no he hallado la respuesta, alguno de ustedes sabe como recuperar la última línea de un ...
  #1 (permalink)  
Antiguo 19/03/2009, 16:50
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Como leer la última línea

Hola!

se que quizá esta pregunta sería básica, pero no he hallado la respuesta, alguno de ustedes sabe como recuperar la última línea de un archivo, tengo esto pero no me va bien

Código:
            try
            {
               fd_in = new BufferedReader (new FileReader("origen.txt"));
               fd_out = new BufferedWriter(new FileWriter(cad, true));
               int k = 0;
               while ((linea = fd_in.readLine()) != null) 
               {
                  k++;
                  fd_out.write (linea, 0, linea.length());
                  fd_out.newLine();
                  System.out.println(linea);

               }
               System.out.println(k - 1);
               fd_in.close ();
               fd_out.close ();            
            }
lo que quiero es que me despliegue la última línea de mi archivo, pero con k-1, solo obtengo el # de líneas que hay en mi archivo, si alguien me pudiera dar una mano, se los agradecería.
  #2 (permalink)  
Antiguo 19/03/2009, 19:54
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Como leer la última línea

Hola, le hice unos cambios a tu codigo, espero que te sirva, saludos
Código PHP:
 String ultimaLinea="";
             try
            {
               
fd_in = new BufferedReader (new FileReader("origen.txt"));
               
fd_out = new BufferedWriter(new FileWriter(cadtrue));
               while ((
linea fd_in.readLine()) != null
               {
                  
fd_out.write (linea0linea.length());
                  
fd_out.newLine();
                  
System.out.println(linea);
                  
ultimaLinealinea;
               }
               
System.out.println(ultimaLinea);
               
fd_in.close ();
               
fd_out.close ();            
            } 
  #3 (permalink)  
Antiguo 20/03/2009, 08:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como leer la última línea

Gracias por la respuesta.
  #4 (permalink)  
Antiguo 20/03/2009, 17:23
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Ayuda!!!

Resulta que no se trata de leer la última línea sino la penultima línea, eso lo complica todo, veran conseguí hacer la siguiente función
Código:
   public static void showLines(String fileName, int startLine, int endLine) throws Exception 
   {
      BufferedReader sarchivo = null;
      
      sarchivo = new BufferedReader(new FileReader(fileName));
      
      String line = null;
      int cantLine = 0;
      while (cantLine < startLine)
      {
         if (sarchivo.readLine() == null)
         {
            throw new IOException ("Archivo demasiado pequeño");
         }
         cantLine ++;
      }
      
      while (cantLine <= endLine)
      {
         line = sarchivo.readLine();
         if (line == null)
         {
            return;
         }
         System.out.println(line);
         
         String cadena = null;
         String uno, dos, tres;
         uno = line.substring(1,5);
         dos = line.substring(6,10);
         tres = line.substring(11,15);
         cadena = "Primer dato: " + uno + " Segundo dato: " + dos + " Trecer dato: " + tres;
         System.out.println(cadena);         
         cantLine++;
      }   
   }

   public static void main(String[] args) throws Exception 
   {
      showLines("boka.txt", 21, 21);
   }
y desde la clase main indico de que archivo y de que línea a que línea quiero leer, el problema es que mi archivo va a crecer siempre y no puedo saber especificamente que numero de línea es la que va a leer, solo sé que es la penúltima línea la que siempre debo leer, he intentado esto
Código:
   public static void main(String[] args) throws Exception 
   {
      BufferedReader sarchivo = null;
      sarchivo = new BufferedReader(new FileReader("boka.txt"));
      int k = 0;
      String linea = "";
      while ((linea = sarchivo.readLine()) != null) 
      {
         k++;
      }
      System.out.println(k); //Total de líneas
      int a = k - 3;
      System.out.println(a);
      String line = null;
      int cantLine = 0;
      while (cantLine < k - 2)
      {
         if (sarchivo.readLine() == null)
         {
            throw new IOException ("Archivo demasiado pequeño");
         }
         cantLine ++;
      }
      
      while (cantLine <= k - 1)
      {
         line = sarchivo.readLine();
         if (line == null)
         {
            return;
         }
         System.out.println(line);
         cantLine++;
      }
   }
pero no me funciona, siempre cae en la excepción, por favor ayudenme a poder leer la penúltima línea de mi archivo sin que importe que número de línea es.

Gracias.
  #5 (permalink)  
Antiguo 22/03/2009, 23:09
 
Fecha de Ingreso: octubre-2005
Ubicación: Córdoba, Veracruz
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Como leer la última línea

Lo que pasa es que el puntero del archivo ya está al final del archivo por haber contado las líneas. Debe haber alguna función para ponerlo en el inicio, o cierra y vuelve a abrir el archivo.
Al menos creo que ese es el problema.
¡Saludos!
  #6 (permalink)  
Antiguo 23/03/2009, 10:23
Avatar de drac94  
Fecha de Ingreso: mayo-2008
Ubicación: México
Mensajes: 383
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Como leer la última línea

a mi se me ocurre q guardes todo el archivo en una variable stringBuffer, le hagas un split con "\n" y saques el numero de tokens q serian el numero de lineas del archivo, ya despues le restas uno y ahora si lees el archivo linea por linea pero ya sabiendo cual es la penultima, ahora el problema es que deben ser archivos relativamente pequeños si no habria un problema de recursos
  #7 (permalink)  
Antiguo 23/03/2009, 20:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Como leer la última línea

Gracias por sus respuestas, y al final lo resolví, como hoolligan666 dijo, el apuntador estaba en la última posición, solo había que releer el archivo y eso soluciono el problema, aquí dejo lo que hice,

Código:
   public static void main(String[] args) throws Exception 
   {
      BufferedReader sarchivo = null;
      sarchivo = new BufferedReader(new FileReader("boka.txt"));
      int k = 0;
      String linea = "";
      while ((linea = sarchivo.readLine()) != null) 
      {
         k++;
      }
      //System.out.println(k); //Total de líneas
      
      String line = null;
      int cantLine = 0;
      
      BufferedReader sarchivoA = null;
      sarchivoA = new BufferedReader(new FileReader("boka.txt"));
      while (cantLine < k - 2)
      {
         
         if (sarchivoA.readLine() == null)
         {
            throw new IOException ("Archivo demasiado pequeño");
         }
         cantLine ++;
      }
      
      while (cantLine <= k - 2)
      {
         
         line = sarchivoA.readLine();
         if (line == null)
         {
            return;
         }
         System.out.println(line);
         
         String cadena = null;
         String uno, dos, tres;
         uno = line.substring(1,5);
         dos = line.substring(6,10);
         tres = line.substring(11,15);
         cadena = "Primer dato: " + uno + " Segundo dato: " + dos + " Trecer dato: " + tres;
         System.out.println(cadena); 
         cantLine++;
      }
   }
  #8 (permalink)  
Antiguo 23/03/2009, 23:08
 
Fecha de Ingreso: octubre-2005
Ubicación: Córdoba, Veracruz
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Como leer la última línea

La solución de drac94 es buena sólo si estás seguro que el archivo a leer no será muy grande en un futuro.
Me da gusto que hayamos podido ayudarte a resolver tu problema.
¡Saludos!
  #9 (permalink)  
Antiguo 24/03/2009, 01:10
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Como leer la última línea

Es un problema de algorítmica básica, y la verdad es que leer dos veces el fichero es totalmente innecesario. Pero si funciona, mejor es nada .
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #10 (permalink)  
Antiguo 24/03/2009, 08:03
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Como leer la última línea

Efectivamente, pero como en mi caso, el archivo si va a crecer mucho, es por esto que aunque la solución no sea la más optima, pues creo que me va a funcionar bien.

Gracias por su ayuda.
  #11 (permalink)  
Antiguo 24/03/2009, 09:27
 
Fecha de Ingreso: octubre-2005
Ubicación: Córdoba, Veracruz
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Como leer la última línea

Ahora que lo pienso, si siempre va ser la penúltima línea que debes recuperar, podrías hacerlo con dos variables: ultima y penultima.
Lees una línea, la guardas en ultima. Revisas si hay otra línea: si la hay, lo que tiene ultima lo pasas a penultima y lees la nueva línea en ultima. Cuando llegues al final del fichero tendrás en ultima la última línea y en penultima la que necesitas.
¡Saludos!
  #12 (permalink)  
Antiguo 24/03/2009, 22:57
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Como leer la última línea

suena bastante optima esta respuesta, pero aunque te parezca increible, me costaría mucho algo de trabajo armar esta solución, de cualquier manera lo intentaré, veré que puedo hacer y quizá los consulte pronto.

nuevamente gracias por sus respuestas.
  #13 (permalink)  
Antiguo 25/03/2009, 02:27
 
Fecha de Ingreso: octubre-2005
Ubicación: Córdoba, Veracruz
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: Como leer la última línea

Quedaría más o menos así:
Código PHP:
      String linea ""ultima ""penultima "";
      while ((
linea sarchivo.readLine()) != null)
      {
         
penultima ultima;
         
ultima linea;
      } 
Y ya no tienes qué recorrer dos veces el archivo.
Pruébalo a ver si te sirve.
¡Saludos!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:37.