Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: Panic0 en 2 Noviembre 2022, 02:26 am



Título: Guardar lineas de un archivo java en un vector
Publicado por: Panic0 en 2 Noviembre 2022, 02:26 am
Hola todo como estan?

Estaba haciendo un programa el cual consiste en leer un archivo y guardar las lineas leidas en un vector

Hasta ahora tengo esto:
Código:
package proyecto;

import java.io.*;

public class testing{

public static void checkArchivo() throws IOException {
try {
int tamanio = 0,pos = 0;
String socio;


File archivo = new File("socios.txt");
FileReader lector = new FileReader(archivo);

BufferedReader lineas = new BufferedReader(lector);

while((socio = lineas.readLine()) != null)  {
tamanio = tamanio + 1;

}

String[] socios = new String[tamanio];
socio = lineas.readLine();
while((socio = lineas.readLine()) != null)  {
socios[pos++] = socio;

}


for(pos = 0;pos < tamanio; pos ++) {
System.out.println(socios[pos]);

}








} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}



public static void main(String[] args) throws IOException {
checkArchivo();

}
}

archivo
Código:
7399601,nombre,apellido,edad,cedula,direccion,telefono,ubicacion,cuota,tipo,
1893482,nombre,apellido,edad,cedula,direccion,telefono,ubicacion,cuota,tipo,
4659235,nombre,apellido,edad,cedula,direccion,telefono,ubicacion,cuota,tipo,


El problema es que al momento de imprimir el vector me sale todo como "null", alguien tiene una idea de lo que puede ser?

Gracias!!


Título: Re: Guardar lineas de un archivo java en un vector
Publicado por: BloodSharp en 2 Noviembre 2022, 04:34 am
Hola, el problema es que no retornás al inicio el BufferedReader por lo que va a seguir siendo nulo luego de contar las líneas. También deberías cerrar tanto el archivo de lector como el de líneas:

Código
  1. FileReader lector = new FileReader(archivo);
  2. BufferedReader lineas = new BufferedReader(lector);
  3.  
  4. lineas.mark(1);
  5.  
  6. while((socio = lineas.readLine()) != null) {
  7. tamanio = tamanio + 1;
  8. }
  9.  
  10. lineas.reset();
  11.  
  12. String[] socios = new String[tamanio];
  13. while((socio = lineas.readLine()) != null) {
  14. socios[pos++] = socio;
  15. }
  16.  
  17. lineas.close();
  18. lector.close();


B#


Título: Re: Guardar lineas de un archivo java en un vector
Publicado por: Panic0 en 2 Noviembre 2022, 23:26 pm
Hola, el problema es que no retornás al inicio el BufferedReader por lo que va a seguir siendo nulo luego de contar las líneas. También deberías cerrar tanto el archivo de lector como el de líneas:

Código
  1. FileReader lector = new FileReader(archivo);
  2. BufferedReader lineas = new BufferedReader(lector);
  3.  
  4. lineas.mark(1);
  5.  
  6. while((socio = lineas.readLine()) != null) {
  7. tamanio = tamanio + 1;
  8. }
  9.  
  10. lineas.reset();
  11.  
  12. String[] socios = new String[tamanio];
  13. while((socio = lineas.readLine()) != null) {
  14. socios[pos++] = socio;
  15. }
  16.  
  17. lineas.close();
  18. lector.close();


B#


Hola, pibe!

Gracias por responder, estuve probando el codigo pero de momento no me funciona mira, te dejo todo aca

Código:
package proyecto;

import java.io.*;

public class testing{
public static void removeLineFromFile() {
try {
String socio;
int tamanio = 0,pos = 0;

File archivo = new File("socios.txt");
FileReader lector = new FileReader(archivo);
BufferedReader lineas = new BufferedReader(lector);

lineas.mark(1);

while((socio = lineas.readLine()) != null) {
tamanio = tamanio + 1;
}

lineas.reset();

String[] socios = new String[tamanio];
while((socio = lineas.readLine()) != null) {
socios[pos++] = socio;
System.out.print(socio);
}



lineas.close();
lector.close();


for(pos = 0;pos<tamanio;pos++) {
System.out.println(socios[pos]);
}
}catch(IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
removeLineFromFile();
}
}

Espero que puedas ayudarme, gracias!!!


Título: Re: Guardar lineas de un archivo java en un vector
Publicado por: K-YreX en 5 Noviembre 2022, 13:23 pm
Echando un vistazo a la documentación de Java sobre el método BufferedReader.mark(int) (https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/BufferedReader.html#mark(int)), se puede ver que el parámetro indica el número de caracteres que se pueden leer del stream mientras se sigue manteniendo la marca. Es decir, usando 'lines.mark(1)' se mantendrá la marca hasta que se lea el segundo carácter...

Para que funcione, el número no puede ser menor al número de caracteres que tiene el fichero ya que tu propósito es leerlo entero.

Creo que hay mejores opciones como:
  • Utilizar un ArrayList<String> para poder añadir líneas de forma dinámica sin tener que calcular antes el número de líneas.
  • Utilizar Files.readAllLines() que directamente devuelve un ArrayList con todas las líneas del fichero.

    Si necesitas guardar las líneas en un String[], siempre puedes convertir el ArrayList<String> a String[]