2012-04-29 7 views
0

I m utilisant read & chaîne d'écriture dans la mémoire interne. Mon "WriteFavData" fonctionne correctement. Mais dans "ReadFavData" ne fonctionne pas. En fait, quand je tends la ligne si (favFile.exists()) dans ReadFavData (.., ..), il dit fichier non trouvé & exécuter la partie else. Je l'ai déjà vérifier l'émulateur mémoire interne en utilisant l'accès au shell de ligne de commande adb shell cat /data/data/com.android.mypackage/files/fav_data_channel, le fichier est là. Pourquoi dit que le fichier n'est pas présent? Toutes les idées ....Problème avec la lecture du fichier de la mémoire interne

public boolean ReadFavData(Context context, String channelName) 
     { 
      boolean isFileFound = false; 
      FileInputStream fin ; 
      StringBuffer strContent = new StringBuffer(""); 
      String fileName = FAV_FILE_NAME + "_" + channelName; 
      File favFile = new File(fileName); 
      int ch; 
      if(favFile.exists()) 
      { 
       isFileFound = true; 
       try { 
        fin = context.openFileInput(FAV_FILE_NAME + "_" + channelName); 
        isFileFound = true; 
        while ((ch = fin.read()) != -1) 
         { 
    strContent.append((char) ch); 
    } 

        fin.close();     


       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       }  
      } 
      else 
      { 
       Log.i(TAG, "not found"); 
      } 

      return isFileFound; 
     } 



public boolean WriteFavData(Context context, String channelName) 
     { 
      String favStr; 
      FileOutputStream fos ; 
      JSONObject videos = new JSONObject();   
      videos.put("videos", favJsonArray); 
      String favStr = videos.toJSONString(); //note.toString(); 
      String fileName = FAV_FILE_NAME + "_" + channelName; 
      File f = new File(fileName); 
      if(f.exists()) 
      { 
       Log.i("Old FIle", "Found"); 
       f.delete();  
      } 

      if(f.exists()) 
       Log.i("Still", "Exist"); 

      try {    
        fos = context.openFileOutput(FAV_FILE_NAME + "_" + channelName, Context.MODE_PRIVATE);    
       fos.write(favStr.getBytes()); 
       fos.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }  
      return true; 
     } 

En fait, je débogués à nouveau & piste en ligne si (File.Exists()), le fichier n'est pas .. Mais si je commente cette ligne & lire mon fichier directement, je suis capable de lire le fichier avec succès. Quel est le problème avec if (file.exists())?

Répondre

2

favFile.exists() retourne toujours false ici, car il ne va pas dans votre répertoire de données privées pour le vérifier. Fera openFileInput ou openFileOutput.

Retirez-le et attraper un FileNotFoundException pour openFileInput.

Ou vous pouvez ajouter le chemin vers votre répertoire de données privées avant le nom favFile.

new File("/data/data/com.android.mypackage/files/fav_data_channel").exists(); 

sera vrai alors.

+0

hmmmm .. Thankx @Dot .. je travaille sans exister. – MicroEyes

+0

Vous pouvez 'return false;' dans exception catch. –

+0

ok .. Thankx @Dot pour une si belle réponse .. – MicroEyes

0

essayez d'appeler Filedescription.sync() après avoir écrit le fichier.

FileOutputStream fos = ... 
... 
fos.getFD().sync(); 
+0

Après ** fos.getFD(). Sync(); ** Je reçois erreur ** Longueur de fichier invalide ** – MicroEyes

+0

pourriez-vous fournir la sortie Logcat – Toorop

+0

il n'y a pas de journal pour cela .. en fait, j'ai débogué à nouveau piste que sur la ligne ** if (file.exists()) **, le fichier n'est pas présent .. Mais si je commente cette ligne et lire mon fichier directement, je suis capable de lire le fichier avec succès. Qu'est-ce qui ne va pas avec ** if (file.exists()) ** – MicroEyes

Questions connexes