Escribir y leer de un fichero con objetos.

Iniciado por Fryuio, 22 Abril 2017, 12:49 PM

0 Miembros y 1 Visitante están viendo este tema.

Fryuio

Hola muy buenas, no sé como podría hacer un código sencillo que me lea y escriba en un fichero objetos.

Yo tengo una cosa así:
Código (java) [Seleccionar]

                private String nombre;
private int numero;

public Personas(String nombre,int numero){

this.nombre=nombre;
this.numero=numero;

}
public String getnombre(){
return nombre;
}
public int getnumero() {
return numero;
}

Es el cacho del objeto que he creado. Bueno el caso, es que me estoy volviendo loco porque no sé como podría hacer que guarde el objeto en un fichero, pero claro, no 1 si no varios objetos de ese tipo, introduciendo por teclado esos valores.
Ejemplo: Juan, 1234
            Antonio, 3456
            .....etc
Y claro, no sé como podría hacer que al meter los parámetros por teclado, me lo escriba en el fichero, y luego me pida el 2º objeto, 3º, etc...Obviamente también me interesa que me imprima por pantalla cuando se acabe de meter datos, los datos de todas las personas.
Me sería de gran ayuda, un saludo.

3n31ch

#1
Supongo que ya sabes como agregar datos a un fichero (abrirlo y agregar una nueva linea al final).?

En dicho caso, te recomiendo que veas el metodo que poseen todas las clases que heredan de la clase Object (osea todas...) El cual se llama .toString().

Puedes buscar sobre eso en la API. (Lamento no poner codigo... Antes lo hacia pero he aprendido que la mejor aprender algo es haciendolo tu mismo).

Cualquier duda me dices.


-------------------

Por cierto. Es mejor que le pongas a tu clase "Persona" no "Personas". Singular siempre  ;D || Existe excepciónes que puedes ver en el mismo JDK. Pero en la mayoria de los casos seran sigunlares

Fryuio

Cita de: 3n31ch en 22 Abril 2017, 13:19 PM
Supongo que ya sabes como agregar datos a un fichero (abrirlo y agregar una nueva linea al final).?

En dicho caso, te recomiendo que veas el metodo que poseen todas las clases que heredan de la clase Object (osea todas...) El cual se llama .toString().

Puedes buscar sobre eso en la API. (Lamento no poner codigo... Antes lo hacia pero he aprendido que la mejor aprender algo es haciendolo tu mismo).

Cualquier duda me dices.


-------------------

Por cierto. Es mejor que le pongas a tu clase "Persona" no "Personas". Singular siempre  ;D || Existe excepciónes que puedes ver en el mismo JDK. Pero en la mayoria de los casos seran sigunlares

Sí, sé leer y escribir en el fichero, lo que me pasa es que no sé como hacer para escribirlos 1 a 1 y que me los vaya pidiendo y guardando. Sé que con un bucle for lo hago, pero no sé muy bien como enfocarlo jaja.

3n31ch

#3
ok, un ciclo for no es el indicado.

Veras en Java (Como en muchos lenguajes) existen tres tipos de ciclos basicos (omitiendo variaciones como el foreach):

El primero ya lo conoces (for):
Código (java) [Seleccionar]

for(int i = 0;i<10;i++) {
   // HACER ALGO 10 VECES
}


El segundo es el ciclo while:

Código (java) [Seleccionar]

int i = 0;
while(i<10) {
   // HACER ALGO 10 VECES
  i++;
}


En el caso anterior se repite lo que tu quieras mientras se cumpla la condicion (es como un if, pero para ciclos)

El tercero es el do-while:
Código (java) [Seleccionar]

int i = 0;
do {
   // HACER ALGO 11 VECES
  i++;
} while(i<10);


Es similar al while solo que verifica si se cumple la condicion despues de ejecutar el codigo (por tanto siempre entrara al menos una vez)

---- Puedes averiguar mas de esto en google ----

Ok, para no complicarnos con el do-while (que seria lo mas indicado) lo hacemos solo con el while:

Código (java) [Seleccionar]

while(true) {
   /// preguntar si quiere el usuario ingresar una persona
  if(si no quiere) break; // con esto sales del ciclo.
  // por tanto si llega a este punto quiere decir que si queria.
  // preguntar los datos de la persona, agregarlos al fichero y volver al inicio.
}



No lo hice con codigo para ver si lo logras maquinar tu solo. Cualquier duda dime!

Fryuio

Cita de: 3n31ch en 22 Abril 2017, 14:09 PM
ok, un ciclo for no es el indicado.

Veras en Java (Como en muchos lenguajes) existen tres tipos de ciclos basicos (omitiendo variaciones como el foreach):

El primero ya lo conoces (for):
Código (java) [Seleccionar]

for(int i = 0;i<10;i++) {
   // HACER ALGO 10 VECES
}


El segundo es el ciclo while:

Código (java) [Seleccionar]

int i = 0;
while(i<10) {
   // HACER ALGO 10 VECES
  i++;
}


En el caso anterior se repite lo que tu quieras mientras se cumpla la condicion (es como un if, pero para ciclos)

El tercero es el do-while:
Código (java) [Seleccionar]

int i = 0;
do {
   // HACER ALGO 11 VECES
  i++;
} while(i<10);


Es similar al while solo que verifica si se cumple la condicion despues de ejecutar el codigo (por tanto siempre entrara al menos una vez)

---- Puedes averiguar mas de esto en google ----

Ok, para no complicarnos con el do-while (que seria lo mas indicado) lo hacemos solo con el while:

Código (java) [Seleccionar]

while(true) {
   /// preguntar si quiere el usuario ingresar una persona
  if(si no quiere) break; // con esto sales del ciclo.
  // por tanto si llega a este punto quiere decir que si queria.
  // preguntar los datos de la persona, agregarlos al fichero y volver al inicio.
}



No lo hice con codigo para ver si lo logras maquinar tu solo. Cualquier duda dime!


Muchas gracias por todos los detalles.
Pero a ver creo que me he expresado mal jaja. Mi problema no está en meter los datos jaja, mi problema está en que no soy capaz de guardar los datos en el fichero jaja

3n31ch

Quizas esto ayude:
Código (java) [Seleccionar]

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

BufferedWriter bw = null;   
bw = new BufferedWriter(new FileWriter("/home/eneich/texto.txt", true));
Scanner scanner = new Scanner(System.in);
String input;
while(true){
System.out.print("exit para salir, cualquier cosa para agregar:");
input = scanner.nextLine();
if(input.equals("exit")) break;
bw.write(input+"\n");

}
bw.close();   
}

Serapis

Aquí dices:
Cita de: Fryuio en 22 Abril 2017, 14:00 PM
Sí, sé leer y escribir en el fichero...
y aquí te desdices:
Cita de: Fryuio en 22 Abril 2017, 14:32 PM
... mi problema está en que no soy capaz de guardar los datos en el fichero jaja

El problema básico es que quieres correr antes de aprender a andar, cuando aún estás gateando.
Aprende a hacer las cosas en orden... no tiene sentido explicar a alguien como construir un avión, si no sabe construir primero una bici.
Te falta lógica... dilucidar qué pasos y en qué orden se deben seguir para lograr un objetivo y luego que tengas eso claro, debes ver que partes de lenguaje realizan cada acción.

Así, primero necesitas aprender más sobre los bucles, las condiciones, mostrar mensajes al usuario y pedirle datos, convertir datos de un tipo a otro, serializarlos... y al final aprender sobre distintos métodos de guardar datos (de texto, binarios, etc...). Te falta base, estudia.

Fryuio

Cita de: 3n31ch en 22 Abril 2017, 14:48 PM
Quizas esto ayude:
Código (java) [Seleccionar]

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

BufferedWriter bw = null;   
bw = new BufferedWriter(new FileWriter("/home/eneich/texto.txt", true));
Scanner scanner = new Scanner(System.in);
String input;
while(true){
System.out.print("exit para salir, cualquier cosa para agregar:");
input = scanner.nextLine();
if(input.equals("exit")) break;
bw.write(input+"\n");

}
bw.close();   
}


Muchas gracias, pero no es mejor para objetos usar el ObjectOutputStream, para hacer escrituras de objetos?

3n31ch

#8
Cita de: Fryuio en 22 Abril 2017, 15:10 PM
Muchas gracias, pero no es mejor para objetos usar el ObjectOutputStream, para hacer escrituras de objetos?

@_@...

Ya no entiendo tu pregunta.

Basicamente quieres que te explique cada detalle del algoritmo?. Lo que puse ahi fue un ejemplo para escribir en un fichero un simple String (Luego tu lo modificas y aplicas para lo que necesites).

---------------

Estoy deacuerdo con lo que dice NEBIRE. Me da la sensacion de que no tienes mucha idea de lo que estas haciendo.

De igual forma te dejo este link:
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/archivos/objetos.htm

Recuerda que como primera instancia tienes que buscar en google, luego en el buscador del foro y luego preguntar.

Fryuio

Cita de: NEBIRE en 22 Abril 2017, 15:08 PM
Aquí dices:y aquí te desdices:
El problema básico es que quieres correr antes de aprender a andar, cuando aún estás gateando.
Aprende a hacer las cosas en orden... no tiene sentido explicar a alguien como construir un avión, si no sabe construir primero una bici.
Te falta lógica... dilucidar qué pasos y en qué orden se deben seguir para lograr un objetivo y luego que tengas eso claro, debes ver que partes de lenguaje realizan cada acción.

Así, primero necesitas aprender más sobre los bucles, las condiciones, mostrar mensajes al usuario y pedirle datos, convertir datos de un tipo a otro, serializarlos... y al final aprender sobre distintos métodos de guardar datos (de texto, binarios, etc...). Te falta base, estudia.

Qué? Vamos a ver, yo sé lo que hay que usar para leer y escribir en un fichero, pero para un caso concreto no sé enfocarlo para que funcione. Mi duda simplemente era como escribir un array de un objeto de 2 parametros. Porque saber, sé hacerlos uno a uno y que se vayan escribiendo, pero claro eso no es nada óptimo si por ejemplo hay que meter 200 valores. Simplemente quería saber como hacerlo de manera óptima. Mi intención no es que nadie me lo de hecho, solo quería una orientación, nada más.