2013-01-23 16 views
8

Sto cercando scrivere un file in SDCard, ma sto ottenendo errore nel logcat:Autorizzazione negata quando scrittura nella sdcard

01-24 09:03:33.647: W/System.err(3353): java.io.FileNotFoundException: /mnt/sdcard/fun/itisfun.txt: open failed: EACCES (Permission denied) 
    01-24 08:24:28.007: W/System.err(3353): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied) 
    01-24 09:03:33.756: W/System.err(3353):at libcore.io.Posix.open(Native Method) 

E qui il mio codice per scrivere in SDCard:

File root = null;  
try { 
    // check for SDcard 
    root = Environment.getExternalStorageDirectory();     
    Log.i(TAG,"path.." +root.getAbsolutePath()); 

    //check sdcard permission 
    if (root.canWrite()){ 
     File fileDir = new File(root.getAbsolutePath()+"/fun/"); 
     fileDir.mkdirs(); 

     File file = new File(fileDir, "itisfun.txt"); 
     FileWriter filewriter = new FileWriter(file); 
     BufferedWriter out = new BufferedWriter(filewriter); 
     out.write("I m enjoying......dude"); 
     out.close(); 
    } 
} catch(...) { 
    ... 
} 

manifesto:

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

risposta

9

per iscritto al sdcard è necessario dare il permesso nel file manifest

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

eish! il mio male l'ho fatto anch'io, e sto ricevendo errore fammi aggiornare la mia domanda – zaamm

4

È necessario assicurarsi di avere il permesso @Ram menziona, e la scheda SD è montato. È possibile verificare se è stato montato da: -

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) 

Si dovrebbe trattare di una scheda montata con grazia, ma un Gotcha comune è se il telefono è collegato tramite il cavo USB puoi fargli montato tramite il sistema operativo desktop, il che significa che non è montato da Android.

Grazie,

Ryan

+0

Ho ancora lo stesso problema – zaamm

+0

Bene l'eccezione originale è FileNotFoundException, sei sicuro che il file ci sia? Puoi pubblicare i log se sono cambiati? – Ryan

+0

Non cambiato Ryan – zaamm

0

Ecco un po 'di codice che utilizzo,

public void yourMethod(){ 

File root = getDir(getApplicationContext());  
    try { 
     File fileDir = new File(root.getAbsolutePath()+"/fun/"); 
     fileDir.mkdirs(); 

     File file = new File(fileDir, "itisfun.txt"); 
     FileWriter filewriter = new FileWriter(file); 
     BufferedWriter out = new BufferedWriter(filewriter); 
     out.write("I m enjoying......dude"); 
     out.close(); 

    } catch(...) { 
    ... 
    } 
} 


public File getDir(Context context) { 

     if (android.os.Environment.getExternalStorageState().equals(
       android.os.Environment.MEDIA_MOUNTED)) 
      cacheDir = new File(
        android.os.Environment.getExternalStorageDirectory(), 
         DIRECTORY_NAME); 
     else 
      cacheDir = context.getCacheDir(); 
     return cacheDir; 
    } 

Se non c'è archiviazione esterna, utilizza fondamentalmente la cache interna telefoni (non va bene per i file di grandi dimensioni)

Leggi this

+0

Mi sono perso Boss, dove posso inserire questo codice che mi hai dato – zaamm

+0

ecco qua l'ho modificato ... ma è davvero molto semplice – Hades

-3
  1. Verificare che la directory fun e il file itisfun.txt esiste sulla scheda SD, se si vuole fare loro da programma, si deve aggiungere l'autorizzazione:
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    Questa autorizzazione consente l'applicazione per creare file o una directory, il permesso :
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> consente solo all'applicazione di leggere e scrivere il file che esiste già.
  2. Assicurati che la tua autorizzazione sia al di fuori del tag <application>, di solito prima.
0

Se siete su 4.4, leggi qui: http://www.androidcentral.com/kitkat-sdcard-changes Fondamentalmente si può più leggere e scrivere in qualsiasi punto dell'unità. Puoi solo scrivere nella tua directory e directory private di cui sei diventato proprietario.

Problemi correlati