IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Bug avec l'utilisation d'un scanner pour lire un fichier


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Points : 136
    Points
    136
    Par défaut Bug avec l'utilisation d'un scanner pour lire un fichier
    Bonjour,

    Lorsque je lis un fichier a l'aide d'un scanner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
        @TargetApi(Build.VERSION_CODES.KITKAT)
        void read()
        {
            String wordBuild = "empty" ;
            int val1, val2 ;
     
            try( Scanner scanner = new Scanner( new InputStreamReader( context.openFileInput("map0") ) )){
                while ( scanner.hasNext()) {
                    if ( scanner.hasNextInt()) {
                        int valu1 = scanner.nextInt();
                        int valu2 = scanner.nextInt();
                        resourceHandler.build( wordBuild, valu1, valu2 ) ;
                    }
                    else {
                        wordBuild = scanner.next();
                    }
                }
        } catch (IOException e) {
     
            }
        }
    il lit bien le fichier, en l’occurrence, il met en place la map, mais si je quitte mon programme et le relance, il plante.
    Si je met rien dans ma fonction write, cela fonctionne en revanche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
        void write(){
            FileOutputStream fOut = null;
            OutputStreamWriter osw = null;
            InputStream strem ;
     
            context.deleteFile("map0");
     
            try{
                fOut = context.openFileOutput("map0", Context.MODE_APPEND);
     
                    osw = new OutputStreamWriter(fOut);
                    int xx = 150, yy = 48;
     
                int valX = resourceHandler.unitSize ;
                int valY = resourceHandler.unitSize/4;
                int c1 = 0, c2 = 0, vS = valX/4 ;
                String wordd = "sea" ;
                for ( int cont = 0 ; cont < 400 ; cont ++ )
                {
                    osw.write( wordd + ' ' + ( valX*c1 + vS + valX/4 ) + ' ' +  valY*c2  + ' '); // si j'enlève cette ligne, il ne construit rien, et ca ne plante pas lorsque je redémarre mon application.
                    c1 ++ ;
                    if (c1 > 10 ){ c1 = 0 ; c2++ ; vS = -vS ;}
                    if ( cont == 200 ){ wordd = "desert";}
                }
            }
         catch (Exception e){
                //addMoney(100);
            }
            finally {
                try {
                    osw.close();
                    fOut.close();
                } catch (IOException e) {
                }
                }
    Avez vous une idée d'où celà peut venir ?

    Merci

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    J'ai bien une idée... de la raison du pourquoi du plantage....

    Si une exception se produit dans fOut = context.openFileOutput("map0", Context.MODE_APPEND); on va directement se trouver dans le catch Exception
    Qui au passage ne fait rien / ne dit rien (bref "cache" l'exception)
    Puis dans le finally...
    Qui fait un joli: osw.close();
    Mais osw est null, donc bim.... NullPointerException ... qui n'est pas une IOException !

    Le code pre-java-7: (au passage je vois pas de référence à "strem"... mais bon).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    OutputStreamWriter outWriter = null;
    try {
       outWriter = new OutputStreamWriter(context.openFileOutput("map0", Context.MODE_APPEND));
     
       .. le code ...
    } catch (Exception ex) {
       Log.e("WRITE","Failed to write output map0",ex);
    } finally {
       if (outWriter != null) try { outWriter.close(); } catch (IOException e) { Log.wtf("WRITE","Failed to gracefully close out-stream !",e); }
    }
    Le code java-7 est "plus simple":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try(OutputStreamWriter outWriter = new OutputStreamWriter(context.openFileOutpout("map0",Context.MODE_APPEND))) {
        ... le code ...
    }  catch (Exception ex) {
       Log.e("WRITE","Failed to write output map0",ex);
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Polling avec OpenReadAsync pour lire un fichier XML
    Par GLoeKS dans le forum Silverlight
    Réponses: 9
    Dernier message: 23/04/2008, 13h32
  2. [bash] utilisation de CAT/AWK pour parser un fichier CSV
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 25/07/2007, 23h34
  3. Réponses: 1
    Dernier message: 02/05/2007, 09h22
  4. utiliser ls et xargs pour déplacer des fichiers
    Par walrus_55 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 06/04/2007, 10h22
  5. Réponses: 3
    Dernier message: 28/03/2007, 13h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo