[Hilo Oficial II] Java

De esa forma ya sabía hacerla, preguntaba por si era posible hacerla en varias lineas y no seguido todo por que me parece menos legible.

Gracias igualmente :)
elenano2 escribió:De esa forma ya sabía hacerla, preguntaba por si era posible hacerla en varias lineas y no seguido todo por que me parece menos legible.

Gracias igualmente :)

Si es por legibilidad, podrías hacer algo como:

System.out.println(
   "primera línea\n" +
   "segunda línea\n" +
   "tercera línea"
);


O así:

String[] menu = new String[]{
           "primera línea",
           "segunda línea",
           "tercera línea"
        };
       
for (String line:menu){
   System.out.println(line);
}
Buenas,
¿Alguno estáis certificado? ¿Os ha sido difícil? ¿Merece la pena -laboralmente-?
Estoy pensando sacarme el OCJP, y luego seguir avanzando... pero es una buena inversión de tiempo.
Un saludo!
Alguno sabe si java tiene algún método predefinido para saber si si en un string están metiendo números? Es para cuando preguntas el nombre que no introduzcan números y los de por buenos.

Por mas que busco por Internet no lo encuentro :(

Es que no se me ocurre como hacerlo...esto de ser novato es un coñazo...:S [mad]

Un saludo
elenano2 escribió:Alguno sabe si java tiene algún método predefinido para saber si si en un string están metiendo números? Es para cuando preguntas el nombre que no introduzcan números y los de por buenos.


http://docs.oracle.com/javase/1.4.2/doc ... .String%29

La expresión regular a usar para este caso es una que abarque el conjunto numérico ([0-9])
Y si quieres tener ejemplos de exxpresiones regulares....

http://docs.oracle.com/javase/6/docs/ap ... ttern.html

Acostumbraros a la API de java, si quieres un método de un string esos están en la clase string XD si no está toca implementarlo.

Usad la API de vuestra versión
Muchas gracias por los consejos, lo haré a partir de ahora, pero no me lo habían ni comentado los profesores.

Gracias en serio
daniel_5 escribió:Y si quieres tener ejemplos de exxpresiones regulares....

http://docs.oracle.com/javase/6/docs/ap ... ttern.html

Acostumbraros a la API de java, si quieres un método de un string esos están en la clase string XD si no está toca implementarlo.

Usad la API de vuestra versión

Hombre, hay veces que la solución no es tan obvia como un método de la clase String xD

Pero sí, la documentación oficial es nuestra amija.
Bueno, cuando no es tan obvia, se miran otras fuentes XD pero lo primero es la documentación oficial en todas las librerías a mi modo de ver.

Además no solo está la descripcion de métodos, sino también bastantes ejemplos.
http://docs.oracle.com/javase/tutorial/index.html

y de regalo.

http://www.java2s.com/
Buenas, estoy haciendo una refactorización de un código bastante grande y quería saber si tenéis idea de si existe alguna forma de buscar qué métodos públicos hay en las clases que solo se llaman desde ellas mismas, para convertirlos a privados, o hacerlo automáticamente. He mirado plugins de eclipse pero no encuentro nada.

Gracias!
wanxu escribió:Buenas, estoy haciendo una refactorización de un código bastante grande y quería saber si tenéis idea de si existe alguna forma de buscar qué métodos públicos hay en las clases que solo se llaman desde ellas mismas, para convertirlos a privados, o hacerlo automáticamente. He mirado plugins de eclipse pero no encuentro nada.

Gracias!

Conviertelos todos en privados y mira dónde hay errores de compilación xD
Desde eclipse puedes ver que métodos son referenciados en cada clase, asi que puedes ver si un método no se referencia desde otras clases.
daniel_5 escribió:Desde eclipse puedes ver que métodos son referenciados en cada clase, asi que puedes ver si un método no se referencia desde otras clases.


Así lo estoy haciendo, pero es un coñazo. Es código traducido a java, y todo es public.
Buenas!

Tengo un problema estoy haciendo un programa con Swing. Es muy sencillo es un JFrame que no dejo redimensionar y al que le meto un panel donde saldrán las opciones. Cuando pulsas una opción el contenido del panel cambiará drásticamente por lo que hago: (Esto es de un cambio de panel a otro, cosa que hace bien lo que hace mal está en el otro código del final y es eliminar el panel del JFrame y que éste, salga vacío)
menu.remove(menu.panel);   //eliminamos el panel del JFrame
menu.setPerson(true);                      // Esto no nos interesa es un boolenano no interfiere en mi problema
menu.altaVehiculo();           //si los datos está¡n todos cumplimentados y el usuario no existe en la lista sacamos el menu vehiculo para un cliente nuevo
menu.setVisible(true);                       //esto lo hago para activar la barra de menu que desactivo al mostrar este panel


La primera vez que lo hago desaparece el panel antiguo del JFrame y se inserta el nuevo con los nuevos datos. El problema es cuando en este nuevo panel al insertar una opción debería dejar el JFrame pelado sin panel algunos solo con el menubar, y en vez de eso, se activa el menubar pero sigue viendo el panel anterio!!!. Si pulso sobre una nueva opción del menu bar que agregue un nuevo panel todo vuelve a funcionar bien, pero al momento que el JFrame se tenga que quedar sin paneles, es decir sin mostrar nada salvo el menubar que no está en el panel, se queda mostrando el panel último que haya salido.


Este es el código que utilizo para intentar el último panel que esté en el JFrame y que éste quede vacío.
menu.remove(menu.panel);      //eliminamos el panel y volemos al menu
menu.setPerson(false);                             //booleano que no nos afecta
menu.actOpciones();            //activamos las opciones de la barra-menu
menu.setVisible(true);      //hacemos visible los cambios en el JFrame


Alguna idea?


Al final lo que he hecho son JFrames nuevos para cada ventana, y así funciona bien. No quería hacerlo así porque me parece penoso tener un JFrame solamente para poner una barramenú y luego al seleccionar una opción tener que abrir otro JFrame... Para compensarlo estoy pensando hacerme un logo y ponerlo de fondo a esa ventana principal que solo tendrá un menubar... A ver si queda menos soso.

Saludos
Hola Compañeros, de nuevo por aqui con mis dudas un tanto estupidas, creo que el trabajo me come demasiado la cabeza y luego no me centro... [buuuaaaa]

Se me ha ocurrido hacer la comprobación del nº de cuenta de la siguiente manera: (Simplemente sirve para que no metan letras)

        while (cliente.numerocompletocuenta.length() != 20) {


            System.out.println("Introduce correctamente la cuenta");
            cliente.numerocompletocuenta = teclado.nextLine();
          }
       
            try{
               Double.parseDouble(cliente.numerocompletocuenta);
             
               
            }catch(NumberFormatException formatException){
               
                 System.out.println("Introduce de nuevo los datos sin letras en la cuenta bancária");
                 aplicacioncuentabancaria.AplicacionCuentaBancaria.main(null);
            }
           
                     


Pero ahora estoy justo con lo contrario, es decir, que no metan números en un string...pero no se me ocurre como hacerlo. O si, pero de una forma muy dificil.....alguna idea que me podáis dar?

Gracias de antemano :p
elenano2 escribió:Pero ahora estoy justo con lo contrario, es decir, que no metan números en un string...pero no se me ocurre como hacerlo. O si, pero de una forma muy dificil.....alguna idea que me podáis dar?


Ya que en un string puedes poner un número y no deja de ser un string, supongo que tendrás recorrer toda la cadena comprobando si cada caracter es un dígito.

http://docs.oracle.com/javase/tutorial/ ... intro.html

Buscando encontrarás mil maneras: http://www.daniweb.com/software-develop ... ads/131256
elenano2 escribió:Hola Compañeros, de nuevo por aqui con mis dudas un tanto estupidas, creo que el trabajo me come demasiado la cabeza y luego no me centro... [buuuaaaa]

Se me ha ocurrido hacer la comprobación del nº de cuenta de la siguiente manera: (Simplemente sirve para que no metan letras)

        while (cliente.numerocompletocuenta.length() != 20) {


            System.out.println("Introduce correctamente la cuenta");
            cliente.numerocompletocuenta = teclado.nextLine();
          }
       
            try{
               Double.parseDouble(cliente.numerocompletocuenta);
             
               
            }catch(NumberFormatException formatException){
               
                 System.out.println("Introduce de nuevo los datos sin letras en la cuenta bancária");
                 aplicacioncuentabancaria.AplicacionCuentaBancaria.main(null);
            }
           
                     


Pero ahora estoy justo con lo contrario, es decir, que no metan números en un string...pero no se me ocurre como hacerlo. O si, pero de una forma muy dificil.....alguna idea que me podáis dar?

Gracias de antemano :p



Mirate el uso de expresiones regulares. http://docs.oracle.com/javase/tutorial/essential/regex/ Yo lo que haría es crear una expresión regular con el formato del número de cuenta (o de lo que quieras obtener) y verificar que Java pueda encontrar dicha expresión en la cadena que le pases.
Bueno, ya he encontrado una forma, mi formaXD de saber si contiene números un string. Simplemente miro si contiene los números y le saco por pantalla el error y le hago reintroducir el nombre :)



if ( cliente.nombre.contains("0") || cliente.nombre.contains("1")|| cliente.nombre.contains("3")|| cliente.nombre.contains("4")){
               System.out.println("Introduce el nombre correctamente porfavor (Minimo 10 letras y máximo 30, sin digitos)");
            aplicacioncuentabancaria.AplicacionCuentaBancaria.main(null);
             
          }
           


Un saludo y si os sirve a vosotros, pues mejor que mejor. Es lo mas simple que he encontrado
Insisto, expresiones regulares:

String cad = new String();
cad = "acvb3";
System.out.println(cad.matches(".*\\d.*"));
elenano2 escribió:Bueno, ya he encontrado una forma, mi formaXD de saber si contiene números un string. Simplemente miro si contiene los números y le saco por pantalla el error y le hago reintroducir el nombre :)



if ( cliente.nombre.contains("0") || cliente.nombre.contains("1")|| cliente.nombre.contains("3")|| cliente.nombre.contains("4")){
               System.out.println("Introduce el nombre correctamente porfavor (Minimo 10 letras y máximo 30, sin digitos)");
            aplicacioncuentabancaria.AplicacionCuentaBancaria.main(null);
             
          }
           


Un saludo y si os sirve a vosotros, pues mejor que mejor. Es lo mas simple que he encontrado



Por qué no haces un nextInt() y esperas un entero ahí controlas la excepción por si te pasan algo que no sea un número salta y das el mensaje de error y vuelves a pedir la cuenta. El rollo es que te tendrían que pasar los 20 dígitos de la cuenta todo seguido sin especios


   boolean bien = false;
   
    while (!bien) {
        try {
            System.out.print("Introduce el númer de cuenta 20 dígitos seguidos: ");
            teclado = nextInt();
            bien = true;
        } catch (Exception e) {
            System.out.println("Código de cuenta incorrecto, han de ser 20 dígitos seguidos");
            teclado.next();
        }
    }


Lo he hecho a lo rápido igual hay algo mal, pero es para que te sirva de guía de lo que te digo
Hola a todos. Ando un poco desconectado de las últimas tecnologías Java y quería que me aconsejarais con una cuestión. Tengo un servidor sockets Java y me han pedido que lo transforme en un WebService. He estado mirando Axis2 de Apache (http://axis.apache.org/axis2/java/core/) y creo que me podría valer. ¿Consideráis que es una buena opción?¿Se os ocurre alguna alternativa mejor? Busco algo lo más portable posible, que se utilice en proyectos serios, que sea gratuito para usos comerciales y que tenga un buen soporte, dado que es para un tema de trabajo.

Gracias de antemano.
Buenas,haber si alguien me echa un cable,seguro que por todo el foro la gente lo pregunta pero veo bastantes hilos cerrados asi que mejor preguntar aqui xD Quiero aprender java,para luego desarrollar aplicaciones en android(y mas cosas,no solo esto claro esta),y soy novato total en esto,osea nivel -5 de 100 para que nos entendamos,llevo unos cuantos dias mirando sobre todo un tutorial en youtube sobre "edu4java"(E visto bastantes mensajes por internet recomendandolo)pero claro,aun asi,aunque haga lo que dice y se me quede casi todo,no me aclaro bien que hacer con esas cosas y eso,no se si me e explicado bien...mi pregunta es que me recomendais?Tutoriales por internet buenos...o cursos online(presenciales imposible,trabajo......) o cosas asi,que me recomendais? [beer]
Alguno sabe qué hacer para que en la JTable me salga el nombre de las columnas que tengo en String[] columNames ?


public void vehiculosLista(ArrayList<Wrapper> lista) {
         JPanel panel = new JPanel();
         Vehiculo datosVehiculo;
         Iterator<Wrapper> it = lista.iterator();
         String[] columNames = {"MATRICULA", "MODELO", "MARCA", "CILINDRADA", "COLOR"};


         frame = new JFrame();
         frame.setTitle("VEHÍCULOS ENCONTRADOS: ");
         frame.setSize(450, 800);
         frame.setResizable(false);
         Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
         frame.setLocation(d.width/2-800/2,d.height/2-600/2);
         frame.setLayout(new FlowLayout());
         frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

         DefaultTableModel dtm = new DefaultTableModel(null, columNames);
         JTable table = new JTable(dtm);
         TableRowSorter<TableModel> tablaOrdenada = new TableRowSorter<TableModel>(dtm);
         table.setRowSorter(tablaOrdenada);
      
         dtm.setColumnIdentifiers(columNames);
         

         while (it.hasNext()) {
            datosVehiculo = (Vehiculo) it.next().getObj();
            Object[] newRow = {datosVehiculo.getMatricula(), datosVehiculo.getModelo(), datosVehiculo.getMarca(), datosVehiculo.getCilindrada(), datosVehiculo.getColor()};
            dtm.addRow(newRow);
         }
         
            table.setEnabled(false);
            table.setAlignmentX(CENTER_ALIGNMENT);
            panel.add(table);
         
         
         boton1 = new JButton("Salir");
         boton1.setIcon(new ImageIcon(getClass().getResource("/Imagenes/salir.png")));
         boton1.setMnemonic('s');
         boton1.setActionCommand("cancelar");
         boton1.addActionListener(listener);

         frame.add(panel);
         frame.add(boton1);
         frame.setVisible(true);

                
                
            }
      
Bozo escribió:Hola a todos. Ando un poco desconectado de las últimas tecnologías Java y quería que me aconsejarais con una cuestión. Tengo un servidor sockets Java y me han pedido que lo transforme en un WebService. He estado mirando Axis2 de Apache (http://axis.apache.org/axis2/java/core/) y creo que me podría valer. ¿Consideráis que es una buena opción?¿Se os ocurre alguna alternativa mejor? Busco algo lo más portable posible, que se utilice en proyectos serios, que sea gratuito para usos comerciales y que tenga un buen soporte, dado que es para un tema de trabajo.

Gracias de antemano.


Casi te diría que es la mejor opción ... para crear el WebService create un WSDL y con wsdl2java tienes el WebService hecho, luego ya el negocio va a parte. En cuanto a portabilidad... pues puedes genera del proyecto un war, ear, ponerlo en tomcat, weblogic, jboss, websphere, menos en un IIS casi en todo, mas portabilidad que eso creo que no hay jejej

@Guantanamera
DefaultTableModel dtm = new DefaultTableModel();
JTable table = new JTable(dtm, columNames);
Utiliza los métodos de addrows() para añadir filas por ejemplo etc etc
Ok ya vi lo que quieres decir voy a probar a ver.. Gracias

Un saludo

EDITADO: Nada dice que el constructor no soporta esos parmámentos en JTable table = new JTable(dtm, columNames);
Es raro, en la API pone que si es válido

http://docs.oracle.com/javase/6/docs/ap ... Table.html

Incluso metiendole el dtm si inicializas todo ahí.

Quizás antes no te funcionaba, debido que lo inicializabas a null??
A ver si alguien sabe resolverme esta duda con herencia e interfaces:

Tengo que implementar una serie de procesos que podríamos dividir en dos tipos, unos sólo necesitan una clase como parámetro y en otros es necesario usar dos. Ahora mismo lo tengo tal que así:

Una clase interfaz con el comportamiento genérico. El método run es el que inicia todo el proceso y luego tendríamos un objeto de la clase ParetoFront que es utilizado por run().

public interface MetricInterface {
    public ParetoFront getKnownPF();
    public void setKnownPF(ParetoFront KnownPF);
   
    public void run();
    public void run(ParetoFront KnownPF);
}


Asimismo tengo mi clase abstracta para genérica (sólo se necesita un objeto como parámetro):
public abstract class ComparisonMetric {
    private ParetoFront KnownPF = new ParetoFront();
   
    public abstract void run();

    public void run(ParetoFront KnownPF){
        this.setKnownPF(KnownPF);
        this.run();
    }
   
    /**
     * @return the KnownPF
     */
    public ParetoFront getKnownPF() {
        return KnownPF;
    }

    /**
     * @param KnownPF the KnownPF to set
     */
    public void setKnownPF(ParetoFront KnownPF) {
        this.KnownPF = KnownPF;
    }
}


Y de ahí heredan dos subclases, una que ahora mismo no hace nada (cuando el método sólo necesita el parámetro KnownPF) y otra que introduce otro parámetro para los casos en los que es necesario (ReferencePF):
public abstract class NoReferenceMetric extends ComparisonMetric{
   
}


public abstract class ReferenceMetric extends ComparisonMetric {
    protected ParetoFront ReferencePF = new ParetoFront();

    /**
     * @return the ReferencePF
     */
    public ParetoFront getReferencePF() {
        return this.ReferencePF;
    }

    /**
     * @param ReferencePF the ReferencePF to set
     */
    public void setReferencePF(ParetoFront ReferencePF) {
        this.ReferencePF = ReferencePF;
    }
   
}


¿Por qué utilizar una interface? Mi idea era que a la hora de ejecutar un proceso se pudiese hacer algo como esto:

El proceso lo implementaríamos desde la interfaz heredando desde la clase correspondiente:
public class ONVG extends NoReferenceMetric implements MetricInterface{

    public void run() {
        System.out.println("hecho");
    }
}


Y en el main sólo habría que hacer:
MetricInterface metric = new ONVG();
metric.run();


Y el caso es que funciona perfectamente. El problema viene cuando quiero hacer lo mismo pero con el caso B, es decir, heredando de ReferenceMetric porque el proceso necesite del atributo ReferencePF, por ejemplo:

public class ONVG2 extends ReferenceMetric implements MetricInterface{

    public void run() {
        System.out.println("hecho");
    }
}


Y en el main:
MetricInterface metric = new ONVG2();
metric.run();


El problema es que en este caso no puedo acceder a los métodos y atributos propios que ONVG2 hereda de ReferenceMetric, concretamente no puedo acceder a setReferencePF o a getReferencePF. Sin embargo si cambio el main a:

ReferenceMetric metric = new ONVG();
metric.run();


En este caso sí puedo acceder a todo. Supongo que no me he enterado bien pero, ¿no se supone que la gracia de usar interfaces es que mediante una interface puedas usar un mismo objeto (en este caso metric) para instanciar clases diferentes? Si no es así, ¿alguien me puede explicar para qué se usan y cómo podría hacer lo que quiero? Que básicamente sería utilizar un sólo objeto "genérico" para poder ejecutar el método run() tanto de las clases que hereden de NoReferenceMetric como de las clases que hereden de ReferenceMetric, vamos, algo así:

ObjGenerico obj = ONVG();
obj.setKnownPF(pf);
obj.run();
obj = ONVG2();
obj.setReferencePF(pf);
obj.run();


Un saludo y gracias a quien tenga la paciencia para leerse el tocho [+risas]
(mensaje borrado)
Hola compañeros, acudo de nuevo a vosotros porque estoy un poco desesperado. Ahora mismo he comenzado con lectura y escritura de archivos y en el temario NO EXPLICAN NADA, es casi incomprensible para mi.

La tarea se trata de:

[Se trata de hacer una aplicación en Java que gestione los clientes de una empresa. Esos datos, se almacenarán en un fichero serializado, denominado clientes.dat.

Los datos que se almacenarán sobre cada cliente son:

NIF.
Nombre.
Teléfono.
Dirección.
Deuda.
Mediante un menú se podrán realizar determinadas operaciones:

Añadir cliente. Esta opción pedirá los datos del cliente y añadirá el registro correspondiente en el fichero.
Listar clientes. Recorrerá el fichero mostrando los clientes almacenados en el mismo.
Buscar clientes. Pedirá al usuario el nif del cliente a buscar, y comprobará si existe en el fichero.
Borrar cliente. Pedirá al usuario el nif del cliente a borrar, y si existe, lo borrará del fichero.
Borrar fichero de clientes completamente. Elimina del disco el fichero clientes.dat
Salir de la aplicación.


Y he empezado 4 veces pero como no me entero no se como empezar, no se como serializar un archivo(Que es realmente? Es decir, se hace al final cuando tengo el archivo con todos los datos o hay que ir indicándolo a cada valor que se va introduciendo?)

Luego en los demas apartados no entro por que como no comprendo el como poder generar un archivo serializado a lo otro ya no llego...si me podéis ayudar en esto a comprenderlo un poco os lo agredeceria muchisimo ya que mis queridos profesores, responden cuando les parece. Esto del superior a distancia es muy complicado...

Muchas gracias por leerme y ayudarme :-| :)


PD: Sabes como poder configurar el cvs en netbeans? Es que cuando me pide meter los datos del root me da error y no se como meterselo. Varía de mac a windows?
Serializar es convertir un objeto y sus referencias a bytes, para luego poder guardarlos en disco y recuperarlos o enviarlos por la red, para ello has de implementar la interfaz Serializable la clase a serializar y en los atributos que sean referencias a objetos de otras clases.

luego grabas con algo cómo esto
ByteArrayOutputStream bs= new ByteArrayOutputStream();
ObjectOutputStream os = new ObjectOutputStream (bs);
os.writeObject(unObjetoSerializable);  // this es de tipo DatoUdp
os.close();
byte[] bytes =  bs.toByteArray(); // devuelve byte[]


y recuperas con
ByteArrayInputStream bs= new ByteArrayInputStream(bytes); // bytes es el byte[]
ObjectInputStream is = new ObjectInputStream(bs);
ClaseSerializable unObjetoSerializable = (ClaseSerializable)is.readObject();
is.close();


Si lees por inet hay ocasiones en las que serializar puede dar problemas, más concretamente cuando hay muchas referencias, sobretodo si están cruzadas o enlazadas... Pero para lo que quieres hacer creo que te irá perfecto

Saludos

P.D. Mira la info la tienes aquí además de en otros lados. Hace una semana he tenido que hacer un proyecto muy parecido al tuyo con Swing para que quedara más cuco y me ha ido de fábula la serialización, aunque como te digo si buscas info, verás que no es la panacea
http://chuwiki.chuidiang.org/index.php?title=Serializaci%C3%B3n_de_objetos_en_java
Muchas gracias guantanamera por responder, mañana retomo la practica otra vez y te digo si me sirve :).

Le formule una pregunta al profesor pero aun no me ha respondido, te la pongo a ti a ver si te parece que lo que "he entendido" es lo viable.

Como tengo que escribir en un archivo y después serializarlo como tu me has puesto, entiendo que puedo pedir todos los datos seguidos(nombre,nif,etc) y una vez obtenido todos los datos guardarlos en un archivo. Después de guardarlos, ese archivo serializarlo y ya estarían todos los datos guardados.

O en su defecto, cada vez que pida una variable tengo que ir grabándola en el archivo?

Un saludo y muchísimas gracias por la ayuda
elenano2 escribió:Muchas gracias guantanamera por responder, mañana retomo la practica otra vez y te digo si me sirve :).

Le formule una pregunta al profesor pero aun no me ha respondido, te la pongo a ti a ver si te parece que lo que "he entendido" es lo viable.

Como tengo que escribir en un archivo y después serializarlo como tu me has puesto, entiendo que puedo pedir todos los datos seguidos(nombre,nif,etc) y una vez obtenido todos los datos guardarlos en un archivo. Después de guardarlos, ese archivo serializarlo y ya estarían todos los datos guardados.

O en su defecto, cada vez que pida una variable tengo que ir grabándola en el archivo?

Un saludo y muchísimas gracias por la ayuda

No tiene sentido guardar por cada variable cuando todos esos datos forman parte del mismo "paquete". Imagínate que antes de terminar de entrar los datos de un usuario peta, qué tienes, datos incompletos almacenados?

Para eso, yo lo veo más útil emplear una bbdd o un xml con unos bonitos nodos de todas formas, pero si te han dicho que lo hagas así, pues así.
No se, yo te pongo arriba como "entiendo" que se guardan en un archivo, la tarea me la ponen ellos y no se puede modificar. Con las explicaciones que dan no entendia bien el concepto, pero poco a poco uniendo ya voy cogiéndolo.

No estaba seguro de si se podia guardar un objeto con X variables de golpe en un archivo y si posteriormente se puede serializar, o como preguntaba al otro compañero, si tenia que ir serializando cada dato introducido (Ahí viene el lió, creía que tenia que serializar la entrada del buffer y esos datos ya eran serializados).

Estas son las dudas de una persona que va buscando por todos lados sin saber del todo lo que se pideXDD
Buenas,

He estado aprendiendo Java por mi cuenta y ahora me gustaría meterle mano a JSP pero no encuentro ningún manual más o menos decente.

¿Podéis recomendarme alguno?

Un saludo y gracias.
A ver es que no se trata de grabar los datos a un archivo y luego serializar el archivo... Se trata de serializar toda la lista que tengas en memoria, junto a todos los datos que estas contentan en un archivo. Es decir imagínate que tienes una lista enlazada donde cada objeto de la lista es un cliente, el cuál tendrá nombre apellidos, teléfono num cuenta o lo que tú quieras, todo en cda objeto de la lista. Pues tu serializas la lista a un fichero, y guardarías todos los clientes con todos sus datos en el fichero.

Más tarde podrías cargar ese fichero que contiene datos serializados, y así recomponer la lista que tenías con todos los clientes que la formaban y sus atributos o datos.

Un saludo
Hola Guantanamera, de nuevo, gracias por responder.

Después de leer varios documentos y siguiendo tus indicaciones, lo comprendí fácilmente, Lo que hice fue hacer la clase "Cliente" implementado Serializable. Después me he creado otra clase serializadora que es la que graba los archivos y los recupera, con esto no hay problema, solo que tengo que hacer funcionar bien la recuperación del archivo.

Creo que he entendido que cuando recuperas los datos tienes que recuperarlos en un objeto y después ya leer ese objeto(cliente recuperado pej), es así no?

Luego ya me quedan unas cosas mas complicadas, como el listar los clientes y buscarlos, pero primero hacer de esto algo util....xD

Un saludo y muchas gracias
Hola compañeros, de nuevo me ha surgido una duda, a ver si la me la podeis aclarar.

Ahora mismo tengo una tres clases (Objcliente,serializadora,metodos). Recojo los valores del objcliente en un metodo que es añadir cliente con los set. Hasta ahí todo correcto, pero cuando tengo que grabar los datos en serializadora no se como puedo grabarlos correctamente, es decir, creo el objeto tambien allí pero no coge los valores.

Como se hace correctamente para poder leer los valores de Objcliente? Es que no tengo ni idea.....creo un objeto nuevo y le meto el valor de sus variables?

Gracias por adelantado...
Espero que comprendáis que no me lea todo el hilo para preguntar esta cuestión que habréis resuelto millones de veces. Perdón.

Estoy haciendo el ciclo de Desarrollo de aplicaciones multiplataforma pero no tengo ni la más remota idea de Programación por motivos varios, entre ellos un profesor inepto. A estas alturas de curso no tengo pensado ya aprobar en junio, pero de cara a septiembre o el año que viene, que a lo mejor me paso a distancia, me gustaría saber cómo podría ponerme a aprender programación por mi cuenta (materiales, métodos de estudio, ect).

En el curso sólo hemos visto Java, grosso modo esto es lo que tengo que aprender (no tenemos un temario, así que lo que sigue es de memoria de los días que he ido a clase):

- Manejar los for, while, if...
- Clases
- Cadenas
- Matrices

Estoy a CERO. Como si no hubiera visto un compilador en mi vida.

Los libros que mencionáis son caros, el tutorial enlazado en la primera página no funciona.

¿Cuánto tiempo, echándole 1h al día, me llevaría ponerme al día con todo eso (matrices es lo último que hemos visto)?
darzia escribió:Buenas,

He estado aprendiendo Java por mi cuenta y ahora me gustaría meterle mano a JSP pero no encuentro ningún manual más o menos decente.

¿Podéis recomendarme alguno?

Un saludo y gracias.


Head First Servlets and JSP de O'Really http://goo.gl/WEoup

Justo estos días me estoy preparando la certificación pertinente y este libro es ideal, tanto para aprender como para certificarte.

Saludos,
Muy buen libro el Head first y comodo de leer.
Rossyafk escribió:Head First Servlets and JSP de O'Really http://goo.gl/WEoup

Justo estos días me estoy preparando la certificación pertinente y este libro es ideal, tanto para aprender como para certificarte.

Saludos,


Gracias, a ver si lo encuentro en formato digital para echarle un ojo y ver un poco cómo es.

Un saludo.
Alguien me puede decir como se puede leer un archivo hasta el final? Tengo un archivo con datos guardados en binarios y quiero leerlo hasta el final. pero solo me devuelve el primer objeto y no se como continuar...

He intentado varias cosas pero sin éxito...

Muchas gracias
Buenas!! Tengo un problema en mi código que no tengo la menor idea de que puede ser. El error que me salta en eclipse es:

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface tecnico.ITecnico, but class was expected


Se que sin ver el código ni saber que estoy haciendo puede ser un poco tosca la pregunta pero, ¿sabéis por qué motivo suele saltar ese tipo de error? No encuentro la solución por ningún lado.

Un saludo y gracias
Ritcher escribió:Buenas!! Tengo un problema en mi código que no tengo la menor idea de que puede ser. El error que me salta en eclipse es:

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found interface tecnico.ITecnico, but class was expected


Se que sin ver el código ni saber que estoy haciendo puede ser un poco tosca la pregunta pero, ¿sabéis por qué motivo suele saltar ese tipo de error? No encuentro la solución por ningún lado.

Un saludo y gracias

Creo que aquí encontrarás la respuesta: http://stackoverflow.com/questions/5914 ... s-expected
Ya había visto ese post pero me quedé igual xD, por probar he eliminado de mi código toda referencia a una biblioteca externa que estaba usando (TDGContract, si la conocéis alguno, lo siento... xDD) en fin, el problema es que tengo que usarla obligatoriamente, a ver que hago para que tire esto.

Un saludo

Edit: Al final se solucionó usando castings, espero no estar arrastrando un error y que mas tarde salga a relucir xD. Saludossss
Hola compañeros, ya estoy aqui con otra duda :-| que llevo varios dias probando cosas pero no encuentro la solucion :S....

El tema es el siguiente:

Tengo que borrar un cliente del archivo serializado que tengo, mediante la comprobacion del nif, es decir, si meto un nif y existe, borrar ese usuario. Hasta ahi ningun problema, se como encontrarlo y todo, pero el problema viene a la hora de "continuar", es decir, no se como pasar al siguiente objeto, o como borrar ese objeto.

He probado de todo pero no encuentro la forma de seguir...:S


bjectInputStream ois = new ObjectInputStream(new FileInputStream("clientes.dat"));

        //Recorremos el fichero entero y comparamos el nif con el nif de los objetos que va recuperando



        ArrayList<ObjCliente> listaObjetos = new ArrayList<ObjCliente>();
        ObjCliente clientere;

        try {


            do {
                clientere = (ObjCliente) ois.readObject();

                if ((clientere.getNif().equals(nifpedido))) {
                    System.out.println("ha llegado");
//Aqui es donde encuentra el cliente con el mismo nif, y donde no se como "pasar de el"
                         
                   
                }else{
               
                listaObjetos.add(clientere);
                }
            } while (clientere != null);

        } catch (EOFException e) {
        } catch (FileNotFoundException exception) {
        }


        // Se pasan los datos del ArrayList al archivo

        for (ObjCliente tmpcliente : listaObjetos) {


            if (contador == 0) {

                try {
                    Main.fichero.delete();
                    System.out.println("El fichero fue eliminado");
                } catch (Exception e) {
                    e.getCause();
                }
                clientere = tmpcliente;
                ReescribirFichero();
                contador = 2;
            } else {
                clientere = tmpcliente;
                ReescribirFichero();
            }

        }


os agradeceria enormemente si algun a trabajado con esto, como poder hacerlo....estoy despesperado [mad]

Un saludo y gracias por adelantado.. [buuuaaaa]

PD: No os fijes en el desorden, que cuando me funciona todo ya lo pongo bonitoxD
Yo diría que ese while está mal. Tendría que ser algo así
while (ois.readObject()!= null);
para que fuera recorriendo todos los objetos.
Buenas,

Leyendo un poco la API sobre el ObjectInputStream no me acaba de quedar del todo claro como se comporta el método readObject() cuando no hay más Bytes que leer:
http://docs.oracle.com/javase/6/docs/ap ... eadObject()

No me queda claro si lanza una Exception o un '-1'

Haz una prueba muy simple, serializa un Cliente y intenta deserializar 2 clientes para capturar la Excepción que lanza el compilador.

Sabiendo como se comporta puedes controlar la situación.

Tal cual tienes el código ahora, si readObject() asigna un 'null' a 'clientere', cosa que no sabemos y no creo que sea así, la siguiente linea te dará un NullPointerException como una casa:
clientere.getNif()

El Try-Catch debería estar rodeando a la linea de código problemática, no a todo el bucle.

Saludos,
769 respuestas