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 :

Lecture d'un fichier interne


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut Lecture d'un fichier interne
    Hello
    dans mon appli, j'ai un edittext pour écrire dans un fichier et un textview pour afficher le contenu du fichier, l'écriture fonctionne mais pas la lecture

    donc, je voudrais lire un fichier sauvegardé en interne mais j'ai une erreur
    au début, je pensais que c'était parce que le fichier n'existait pas mais j'ai toujours le problème après l'avoir créé (je n'ai pas vérifié s'il a bien été créé mais d'après un test précédent, il devrait l'être)

    je précise que au 1er lancement de l'application, le fichier n'existe pas et dans ce cas là, ça se contente d'afficher "pas de données"
    comme le fichier n'existe pas au début, j'avais utilisé "file.exists()" mais même avec ça, ça plante alors je l'ai mis en commentaires

    pour faire simple et court, c'est censé faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    si le fichier existe
        ça lit son contenu
        si y a kkch dans le contenu
            ça affiche le contenu
        sinon
            ça affiche pas de données
    sinon
        ça affiche pas de données
    merci

    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
    public String ReadProfile(String filename_profile) {
        	FileInputStream fIn = null;
            InputStreamReader isr = null;
            Context context = getBaseContext();
            //Context context = null;
     
            char[] inputBuffer = new char[255];
            String data = null;
            try {
            	//File file = context.getFileStreamPath(FILENAME + filename_profile);
            	//if(file.exists()) {
                fIn = context.openFileInput(FILENAME + filename_profile);
                isr = new InputStreamReader(fIn);
                isr.read(inputBuffer);
                data = new String(inputBuffer);
                return data;
            	/*}
            	else {
            		Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
            		return getString(R.string.profile_unknown);
            	}*/
            }
            catch(Exception e) {
                Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
                return getString(R.string.profile_unknown);
            }
            finally {
                try {
                    isr.close();
                    fIn.close();
                }
                catch(IOException e) {
                    Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
                    return getString(R.string.profile_unknown);
                }
            }
        }
    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
    08-28 16:43:38.466: ERROR/AndroidRuntime(1283): Uncaught handler: thread main exiting due to uncaught exception
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.ice/com.android.ice.Profile}: java.lang.NullPointerException
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.os.Handler.dispatchMessage(Handler.java:99)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.os.Looper.loop(Looper.java:123)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.ActivityThread.main(ActivityThread.java:4363)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at java.lang.reflect.Method.invokeNative(Native Method)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at java.lang.reflect.Method.invoke(Method.java:521)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at dalvik.system.NativeStart.main(Native Method)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283): Caused by: java.lang.NullPointerException
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at com.android.ice.Profile.ReadProfile(Profile.java:412)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at com.android.ice.Profile.onCreate(Profile.java:86)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    08-28 16:43:38.475: ERROR/AndroidRuntime(1283):     ... 11 more

  2. #2
    Membre chevronné
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par défaut
    La ligne 412 représente quelle ligne dans Profil.java

  3. #3
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    dans le finally

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Par défaut
    Bonjour,
    Tu as une nullpointerexception dans le cas où le fichier n'existe pas.
    Il essaye de l'ouvrir, mais il n'y arrive pas. Donc la valeur est toujours null et dans le finally tu essayes de fermer le fichier. Tu devrais gérer cette exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     try {
          isr.close();
          fIn.close();
    }
    catch(IOException e) {
          Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
          return getString(R.string.profile_unknown);
    }
     catch(NullPointerException e) { }

  5. #5
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    j'ai testé avec ou sans le finally (je déplace la fermeture du fichier au besoin dans le try), ça ne change rien sur le fait qu'il me lève une exception avec le catch que j'ai rajouté (catch(NullPointerException e)) sur l'ouverture

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public String ReadProfile(Context context, String attribut) {
        	FileInputStream fIn = null;	
            InputStreamReader isr = null;
            //Context context = getBaseContext();
            //Context context = null;
     
            char[] inputBuffer = new char[255];
            String data = null;
            try {
                fIn = context.openFileInput(FILENAME_PROFILE);
            }
            catch(IOException e) {
                Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
                return getString(R.string.profile_unknown);
            }
            catch(NullPointerException e) {
            	Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
                return getString(R.string.profile_unknown);
            }
            isr = new InputStreamReader(fIn);
            try {
    		isr.read(inputBuffer);
    		data = new String(inputBuffer);
    		/*isr.close();
            	fIn.close();*/
    	        return data;
    	}
            catch (IOException e) {
    		return getString(R.string.profile_unknown);
    		}
            catch(NullPointerException e) {
    		return getString(R.string.profile_unknown);
            }
            finally {
                try {
                    isr.close();
                    fIn.close();
                }
                catch(IOException e) {
                    Toast.makeText(context, R.string.profile_read_n, Toast.LENGTH_SHORT).show();
                    return getString(R.string.profile_unknown);
                }
                catch(NullPointerException e) {
        			return getString(R.string.profile_unknown);
                }
            }
        }
    j'ai aussi rajouté une fonction que j'appelle en premier pour vérifier si le fichier existe, et là aucune exception donc le fichier existe bien
    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
     
    si le fichier n existe pas
        je le crée
    si le fichier existe
        je ne fais rien
     
    public void CheckFileExist(Context context) {
            FileOutputStream fOut = null; 
            OutputStreamWriter osw = null;
            try {
            	File file = context.getFileStreamPath(FILENAME);
            	if(!file.exists()) {
            		try {
            			fOut = context.openFileOutput(FILENAME, MODE_PRIVATE);
            		}
            		catch (FileNotFoundException e) {
            			e.printStackTrace();
            		}
            		osw = new OutputStreamWriter(fOut);
            		try {
            			osw.write("coucou");
            			osw.flush();
            			osw.close();
            			fOut.close();
            		}
            		catch (IOException e) {
            			e.printStackTrace();
            		}
            		/*catch(NullPointerException e) {
            			Toast.makeText(context, "file not exist", Toast.LENGTH_SHORT).show();
            		}*/
            	}
            }
            catch(Exception e) {
    			e.printStackTrace();
    		}
        }

  6. #6
    Membre confirmé Avatar de Jesmar
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 115
    Par défaut
    c'est bien cette permission qu'il faut rajouter dans le manifest ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uses-permission android:name="android.permission.READ_OWNER_DATA"></uses-permission>

  7. #7
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    ou pas... Une NPE est toujours une erreur de programmation, et *aucun* runtime-exception ne devrait jamais etre catché...

    c'est le paradygme classique d'allocation des ressources:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ResourceType res = null;
    try {
        res = allocateResource();
        ...
    } finally {
        if (res != null) try {
            freeResource(res);
        } catch (Exception t } { CRITICAL("Couldn't free resource !"); }
    }
    J'attends toujours depuis 20 ans, un language (qui ne soit pas de haut niveau) qui permette de simplifier ce genre d'écriture (c'est gavant à la longue).

Discussions similaires

  1. Lecture d'un fichier .dbf
    Par San Soussy dans le forum Autres SGBD
    Réponses: 8
    Dernier message: 07/07/2004, 16h30
  2. Réponses: 6
    Dernier message: 02/09/2003, 15h12
  3. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40
  4. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 4
    Dernier message: 05/02/2003, 08h54
  5. [langage] Optimiser la lecture d'un fichier
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 11/06/2002, 10h24

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