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

[SOLUCIONADO] Duda en el try

Estas en el tema de Duda en el try en el foro de Java en Foros del Web. Hola de nuevo, por aqui resolviendo cualquier duda que me aparezca,jejeje. Bueno el tema es que me he dado cuenta que cuando trabajo con el ...
  #1 (permalink)  
Antiguo 07/03/2014, 20:38
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Duda en el try

Hola de nuevo, por aqui resolviendo cualquier duda que me aparezca,jejeje. Bueno el tema es que me he dado cuenta que cuando trabajo con el try y catch, cuando por ejemplo leo un fichero y termina el bucle no ejecuta lo que viene a continuacion, lo unico que supongo que ejecuta es el fichero.close(), por ejemplo:

try
{
aqui el bucle para leer el fichero con while
{
}

system.out.println("probando"); Esto no me lo ejecuta cuando termina de leer,
fichero.close(); Esto supongo que si me lo ejecutara
}
Cuando termina el try solo ejecuta la opcion de cerrar fichero y listo? bueno otra duda mas,jejeje

Gracias y un saludo
  #2 (permalink)  
Antiguo 08/03/2014, 02:11
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Duda en el try

No se entiende muy bien, no sé que tiene que ver lo que estás preguntando con un try.

Lo que has puesto ahí se ejecuta todo. Cuando terminas el bucle, sigue ejecutándose todo lo que vaya detrás, el system.out y el close. Tampoco creo que sea algo complejo para que pruebes a ver si se ejecuta o no.

Si saltase una excepción, se iría automáticamente al catch y ya no se ejecutaría nada más de lo que haya dentro del try.

Para el caso de ficheros, la forma correcta de usar el try-catch es así

Código:
fichero = null;
try {
     fichero = abrir fichero 
     bucle de lectura 
} catch (Exception e) {
     // Error
} finally {
   if (null!=fichero) fichero.close();
}
El finally se ejecutará tanto si hay excepción como si no, incluso aunque pongas un return dentro del try o del catch. Es la forma de asegurarse de que el fichero se cierra pase lo que pase.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 08/03/2014, 08:41
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda en el try

Este es el trozo de codigo para lectura del fichero, lo que sospecho que al provocarse la excepcion de lectura, no imprime en pantalla el Si y creo que tampoco cierra el fichero,
Try
{
while (lectura)
{

System.out.println(fa.readUTF());
System.out.println(fa.readInt());
System.out.println(fa.readFloat());
}
System.out.println("Si");



fa.close();
}

Gracias y un saludo.
  #4 (permalink)  
Antiguo 08/03/2014, 08:42
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Duda en el try

Sí, es lo que te comenté antes, si salta excepción, deja de ejecutarse el resto de código en el try, por eso se pone el close en el finally.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 08/03/2014, 08:46
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda en el try

Ok amigo chuidang, entonces hay que poner ese trozo fuera del try para que se ejecute, y otra dudita, que riesgo hay que no se cierre el fichero? Saludos.
  #6 (permalink)  
Antiguo 08/03/2014, 09:32
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda en el try

Bueno amigo chuidiang he puesto el trozo en el finally y si me lo ejecuta, lo que ocurre que tengo que meter el fichero.close() en un try de nuevo porque me decia IOException de nuevo, asi si me funciona, y tambien el netbeans me da un aviso de dereferencing possible null pointer, el codigo me ejecuta sin problemas y no me lanza error, lo unico que tengo ese aviso en netbeans. Saludos.
  #7 (permalink)  
Antiguo 08/03/2014, 09:40
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Duda en el try

Si en el finally pones el if que te puse, te quitará el warning.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 08/03/2014, 09:47
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda en el try

Ok lo puse como dices y no me aparece el aviso,jejeje. Como te dije en el finally me obliga a poner un try y catch porque me avisa de otra excepcion, no puedo poner en el finally a secas el cierre del fichero. Saludos.
  #9 (permalink)  
Antiguo 08/03/2014, 11:01
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Duda en el try

No se puede, close suelta una excepcion, por lo que hay que ponerlo dentro de un try-catch nuevamente.

Si lo utilizas mucho en el código, yo habitualmente suele hacer una clase estilo esto

Código Java:
Ver original
  1. public class Util {
  2.    public static close ( InputStream is ) {
  3.        try {
  4.              if (null != is) is.close();
  5.        } catch (Exception e) {
  6.             // ...
  7.        }
  8.    }
  9. }

y de esta forma sólo tienes que poner en tu código

Código Java:
Ver original
  1. fichero = null;
  2. try {
  3.      fichero = abre fichero;
  4.      leer fichero
  5. } catch (Exception e) {
  6.      ...
  7. } finally {
  8.      Util.close(fichero);
  9. }

Como te digo, es útil si lo vas a usar en varios sitios. Y si tienes otras cosas que cerrar que no sean o hereden de InputStream, tendrás que hacer otros métodos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #10 (permalink)  
Antiguo 08/03/2014, 11:29
 
Fecha de Ingreso: octubre-2011
Mensajes: 90
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Duda en el try

Ok amigo chuidiang, Gracias y un saludo por la aclaracion. Ciaoooo

Etiquetas: Ninguno
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 22:01.