2010-07-22 6 views
4

Je suis un débutant dans le développement Android. J'essaie d'écrire quelque chose dans un fichier. J'utilise le code:Android écrire dans le fichier - ne peut pas trouver le fichier

try { 
        FileOutputStream fOut = openFileOutput(
          "out.txt", MODE_WORLD_READABLE); 

        OutputStreamWriter osw = new OutputStreamWriter(fOut); 
        osw.write("something"); 
        osw.flush(); 
        osw.close(); 
        fOut.close(); 

       } catch (MalformedURLException e) { 
        Log.e("FILE WRITE ERROR", e.getMessage()); 
       } catch (IOException e) { 
        Log.e("FILE WRITE ERROR", e.getMessage()); 
       } 

Tout c'est ok, mais je ne peux pas trouver le fichier dans l'explorateur de fichiers DDMS. Pourriez-vous m'aider et me dire où Android enregistre le fichier? Ce n'est pas dans "/ data/data/my_project_package". Merci.

Répondre

5

1) Assurez-vous d'avoir dans votre manifeste:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

2) Il fait une différence, que ce soit des tests avec l'émulateur ou le périphérique. Dans le cas de ce dernier, assurez-vous de démonter l'appareil de votre PC (Choisissez: "Charger uniquement"). Le débogage fonctionnera toujours de cette façon. C'est juste que vous ne pouvez pas écrire et regarder en même temps.

Cette méthode fonctionne:

public void writeToExternalStoragePublic(String filename, int content) { 
    String packageName = this.getPackageName(); 
    String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/Android/data/" + packageName + "/files/"; 
    if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { 
     try { 
      boolean exists = (new File(path)).exists(); 
      if (!exists) { 
       new File(path).mkdirs(); 
      } 
      // Open output stream 
      FileOutputStream fOut = new FileOutputStream(path + filename,true); 
      // write integers as separated ascii's 
      fOut.write((Integer.valueOf(content).toString() + " ").getBytes()); 
      fOut.write((Integer.valueOf(content).toString() + " ").getBytes()); 
      // Close output stream 
      fOut.flush(); 
      fOut.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

J'ai essayé d'utiliser ce code avec le ''. Je reçois toujours une exception FileIOException (java.io.FileNotFoundException: /mnt/sdcard/Android/data/com.foo/files/This.html: open failed: EACCES (Permission denied)) 'dans la ligne' new FileOutputStream'. Que pourrais-je manquer? Je cours dans l'émulateur. Je note que 'File (path) .mkdirs()' ne jette aucune exception. Il ne crée pas non plus les répertoires. –

1

Il semble y avoir beaucoup de questions sur ce sujet et le problème semble souvent se résumer à i) ne pas demander des autorisations dans le AndroidManifest.xml ii) étant monté de stockage de l'appareil sur un ordinateur au moment de l'exécution de l'application ou iii) les paramètres de l'émulateur. Dans l'espoir que d'autres qui ont essayé toutes ces solutions et échoué, je soumets iv) ordinateur décide d'ignorer arbitrairement votre paramètre d'autorisation dans AndroidManifest.xml après avoir extrait le code d'un référentiel source qui a été écrit sur un autre ordinateur. Dans mon cas, je viens d'écrire du code sur l'ordinateur A qui écrit sur le stockage externe. J'ai vérifié ce code dans le contrôle de la source, puis tiré ledit code sur l'ordinateur B. Lorsque j'ai réinstallé l'application de l'ordinateur B sur le périphérique, j'ai commencé à obtenir l'exception Autorisation refusée.

Le correctif: faire tout changement au fichier AndroidManifest.xml sur l'ordinateur B (par exemple insérer une nouvelle ligne quelque part). Cela a réglé le problème pour moi. Je ne sais pas pourquoi. C'est probablement l'un des cas les plus rares, mais plus frustrant.

1

Placez <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"> dans votre manifeste.

Here est une référence à ce sujet.

+0

Cette autorisation est pour les applications système uniquement ... –

Questions connexes