2017-01-03 3 views
0

Je souhaite créer un fichier texte simple sur un périphérique Android sur une carte SD externe. Avec mon code, je reçois toujours l'erreur: java.io.FileNotFoundException: /storage/emulated/0/SFX/TEST1.txt: open failed: ENOENT (No such file or directory)Créer un fichier texte via FileOutputStream sur une carte SD externe dans Android - FileNotFoundException

j'ai mis <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> dans mon fichier manifeste

 Button btn = (Button)findViewById(R.id.btn_Save); 
     btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //mach was 
      StringBuilder sb = new StringBuilder(); 
      sb.append(txtName.getText().toString()); 
      sb.append(System.getProperty("line.separator")); 
      sb.append(txtMonteur.getText().toString()); 
      sb.append(System.getProperty("line.separator")); 
      sb.append(txtStraße.getText().toString()); 
      sb.append(System.getProperty("line.separator")); 
      sb.append(Energiearten); 

      File file; 
      FileOutputStream out; 
      try 
      { 
       file = new File(Environment.getExternalStorageDirectory(), "SFX/TEST1.txt"); 
       file.mkdirs(); 
       out = new FileOutputStream(file); 
       out.write(sb.toString().getBytes()); 
       out.close(); 

      } catch (IOException e) { 
       e.printStackTrace(); 

      } catch (Exception e) { 
       Toast.makeText(ZBewegung.this, "Error:" + e.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
+2

Si vous testez dans> = 23 api vous devez écrire du code pour vérifier l'autorisation aussi. sinon, publiez votre journal des erreurs ici aussi. – androidnoobdev

+1

[Mettre en œuvre les autorisations d'exécution] (https://stackoverflow.com/questions/32635704/android-permission-doesnt-work-even-if-i-have-declared-it). Notez également que votre code ne se rapporte pas à une carte SD, car [stockage externe] (https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html) n'est pas [stockage amovible ] (https://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html) sur la plupart des appareils Android. – CommonsWare

+0

vérifier carte SD pour savoir si le fichier est créé ou non? –

Répondre

0
file = new File(Environment.getExternalStorageDirectory(), "SFX/TEST1.txt"); 
file.mkdirs(); 

Cela crée un répertoire nommé SFX/TEST1.txt, ce qui est pas ce que vous voulez.

Essayez:

File dir=new File(Environment.getExternalStorageDirectory(), "SFX"); 
dir.mkdirs(); 
file = new File(dir, "SFX/TEST1.txt"); 
+0

avec votre code et en mettant en œuvre ce (http://stackoverflow.com/questions/33666071/android-marshmallow-request-permission) je peux écrire avec succès sur le stockage interne (pas la carte SD amovible). Des suggestions comment écrire à la carte SD? doesnt getExternalStorageDirectory() signifie carte SD? –

+0

@SepPei: "doesnt getExternalStorageDirectory() signifie carte SD?" -- non. Comme je l'ai noté dans un commentaire sur votre question, [stockage externe] (https://commonsware.com/blog/2014/04/08/storage-situation-external-storage.html) n'est pas [stockage amovible] (https: //commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html). Sous Android 4.4+, utilisez 'getExternalFilesDirs()' et recherchez les objets 'File' suivants dans la liste renvoyée. Ceux-ci devraient être sur le stockage amovible, pointant vers des répertoires dans lesquels votre application peut lire et écrire. – CommonsWare