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 :

Effacer une ligne dans un fichier .dat


Sujet :

Android

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Effacer une ligne dans un fichier .dat
    Bonjour la communauté,
    Je fais appel à vous car j'ai un problème avec des fichiers .dat.

    Je cherche à effacer une ligne selectionnée par l'utilisateur dans un fichier .dat

    voici le code de ma méthode :
    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
     
    public void effacerLigne(String nomDuFichier, String ligne){
                            FileInputStream fIn = null;
    			InputStreamReader isr = null;
    			BufferedReader br = null;
     
    			FileOutputStream fOut = null;
    			OutputStreamWriter osw = null;
     
     
    			try {
    				   fIn = c.openFileInput(nomDuFichier);
    				   isr = new InputStreamReader(fIn);
    				   br = new BufferedReader(isr);
    				   fOut = c.openFileOutput("t" + nomDuFichier, Context.MODE_APPEND);
    				   osw = new OutputStreamWriter(fOut);			
     
    					String line;         
    				while ((line = br.readLine()) != null) {
     
    				        if (!line.equals(ligne)) { 
    				        	osw.write(line + '\n');	
    				        	osw.flush();
     
    				        }
    				        else if (line.equals(ligne)){
    				        	Toast.makeText(c.getApplicationContext(), line + " " + ligne, Toast.LENGTH_LONG).show();
    				        }
    				}
    				br.close();
    				isr.close();
    				fIn.close();
    			    osw.close();
    			    fOut.close();
     
     
    		      File ancien = new File(nomDuFichier);
    		      File nouveau = new File("t" + nomDuFichier);
    		      ancien.delete();
    		      nouveau.renameTo(ancien);
     
    			}catch(Exception e) { 
    				Toast.makeText(c.getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show(); 
    			}
    Tout se passe bien sauf à la fin,
    Je souhaite renommer le nouveau fichier crée avec la ligne en moins, par le nom de l'ancien, mais cela ne fonctionne pas.
    Quelqu'un a t'il une idée?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    As-tu essayé de ne pas faire appel à ancien.delete(); ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bonjour Simon,

    Oui à la ligne 39

    Et le renamTo ne change rien, car si je mets un toast derriere pour connaitre le nouveau nom du nouveau Fichier il s'appelle toujours "t" + quelquechose...
    Je pense que le problème viens de l'instanciation des objets File...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Attention, j'ai bien dis : ne pas faire appel à ancien.delete();

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Ah oui pardon!
    Je viens d'essayer, même résultat...

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    Sinon, tu peux essayer d'une manière différente :
    Tu copie le fichier 'Fichier' vers un nouveau fichier 'SauvegardeFichier'.
    Tu écris dans le fichier 'Fichier' (ne pas utiliser le mode append).
    Si quelque chose échoue, il te suffit de renommer 'SauvegardeFichier' en 'Fichier'.
    Si tout est ok, il te reste à supprimer le fichier 'SauvegardeFichier'.

  7. #7
    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
    Attention... File() est un faux amis... L'objet ne représente pas un fichier, mais le chemin d'un fichier....

    Et entre openFileOutput(name) (j'imagine que "c" est un contexte), et new File(name) il y a une *grosse* différence....

    Je te conseille de transformer ta fonction en un truc genre:
    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
     
    public void effacerLigne(File fichier, String ligne) {
     
        File tempFile = File.createTempFile("temp",null,fichier.getParent());
        boolean succeeded = false;
     
        try {
            src = new BufferedReader(new FileReader(fichier));
            dest = new FileWriter(tempFile);
     
            ... le code de remplacement ...
     
            succeeded = true;
        } finally {
            if (src != null) src.close();
            if (dest != null) dest.close();
        }
     
        if (succeeded) {
           fichier.delete();
           tempFile.renameTo(fichier);
        } else {
           tempFile.delete();
        }
    }
    Non seulement il marchera sur n'importe quel fichier (et pas seulement dans les fichiers "privés" du context), mais cela évitera de se trimbaler deux manières de référencer le fichier.

    Ensuite il faut découvrir comment passer du filename local à un File:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void effacerLigne(String filename, String ligne) {
        File localFile = new File(c.getFilesDir(),filename);
        effacerLigne(localFile,ligne);
    }
    Et le tour devrait être joué !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Bonjour Nicroman, et MERCI pour ta réponse!!!

    Je me doutes bien que le problème viens de l'objet File...

    Je vais essayer ça tout de suite!!

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    ça marche parfaitement !!!
    Et c'est plutôt astucieux finalement.
    Et merci pour les précisions sur l'objet File que j'ai du mal à bien cerner.

    je rectifie juste un bout de code, à la ligne 4 :

    File tempFile = File.createTempFile("temp",null,fichier.getParent());

    c'est getParentFile() la méthode

    Merci encore Nicroman

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. effacer une chaine de caractère dans une ligne dans un fichier texte
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 25/08/2010, 10h22
  2. [CSV] Effacer une ligne dans un fichier CSV
    Par poulepexo dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2009, 12h12
  3. Effacement d'une ligne dans un fichier txt
    Par DjChat dans le forum Langage
    Réponses: 4
    Dernier message: 09/06/2008, 10h41
  4. [FSO] Effacer une ligne dans un fichier
    Par Johnbob dans le forum ASP
    Réponses: 4
    Dernier message: 30/05/2007, 16h23
  5. [langage] Effacer une ligne dans un fichier
    Par sebi77 dans le forum Langage
    Réponses: 2
    Dernier message: 01/01/2005, 12h43

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