Fermer un Scanner relié au système.en

j'ai un Scanner lié System.in. Maintenant, après avoir utilisé le Scanner, je devrais la fermer, que c'est une mauvaise pratique de codage, de la laisser ouverte. Mais, si je ferme l' Scanner, je vais aussi être de fermeture System.in! Quelqu'un peut-il me dire comment je peux fermer le Scanner sans fermeture System.in (s'il y a un moyen).

23
demandé sur JavaNewbie_M107 2013-01-03 20:21:26

5 réponses

une option est d'envelopper votre System.in stream CloseShieldInputStream qui l'empêche d'être fermé. Votre lecteur utiliserait alors le CloseShieldInputStream plutôt que le raw System.in stream.

Voici L'API pour la classe: http://commons.apache.org/io/apidocs/org/apache/commons/io/input/CloseShieldInputStream.html

17
répondu paul jerman 2014-10-07 21:26:11

la chose la plus simple est de ne pas fermer le Scanner si vous ne voulez pas fermer le flux sous-jacent.

Idéalement, vous devriez créer juste un Scanner que vous utilisez pour la vie du programme. En tout cas, il semble que vous n'avez pas une bonne raison de le fermer.

22
répondu Peter Lawrey 2013-01-03 16:32:35

au lieu d'ajouter des classes de bouclier et des trucs comme ça, il suffit de mettre un joli commentaire et un

        @SuppressWarnings("resource")

C'est suffisant. Et je ne vois pas beaucoup d'inconvénients à cette approche. N'oubliez pas le commentaire.

6
répondu mist 2014-07-06 09:09:32

j'ai de vagues souvenirs de problèmes étranges, impossibles à diagnostiquer il y a longtemps avec l'utilisation de la même ScannerSystem.in deux fois, donc c'est ce que j'utilise (même si vous devriez probablement utiliser un scanner pour la durée du programme):

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

Pour une raison quelconque, cela fonctionne sans avertissements, alors que si je ne fais pas l'attraper-lancer, Eclipse va se plaindre Resource leak: '<unassigned Closeable value>' is never closed.

0
répondu Blrp 2015-11-17 17:08:27