java java.util.scanner

java - Cerrar un escáner vinculado a System.in



java.util.scanner (5)

De acuerdo con la API para InputSteam "El método de cierre de InputStream no hace nada", por lo que, como System.in es una instancia de InputStream, no tiene que preocuparse de que se llame a close ().

Tengo un Scanner vinculado a System.in . Ahora, después de usar el Scanner , debería cerrarlo, ya que es una mala práctica de codificación dejarlo abierto. Pero, si cierro el Scanner , también System.in ! ¿Alguien puede decirme cómo puedo cerrar el Scanner sin cerrar System.in (si hay alguna manera)?


En lugar de agregar clases de escudo y cosas por el estilo, solo pon un buen comentario y un

@SuppressWarnings("resource")

Eso es lo suficientemente bueno. Y parece que no veo muchos inconvenientes en este enfoque. No olvides el comentario.


Lo más sencillo es no cerrar el Escáner si no desea cerrar la secuencia subyacente.

Lo ideal es que cree un solo escáner que use durante la vida del programa. En cualquier caso, parece que no tienes una buena razón para cerrarla.


Tengo vagos recuerdos de problemas extraños e imposibles de diagnosticar hace mucho tiempo con el uso del mismo Scanner de System.in dos veces, así que esto es lo que uso (aunque probablemente debería usar un solo escáner durante la duración del programa):

static String input() { try { return new Scanner(System.in).nextLine(); } catch (NoSuchElementException e) { throw e; } }

Por alguna razón, esto funciona sin advertencias, mientras que si no hago el catch-throw, Eclipse se quejará de la Resource leak: ''<unassigned Closeable value>'' is never closed .