4

J'utilise le code suivant pour copier un répertoire particulier et son contenu sur la carte SD. Le répertoire est placé dans le dossier res/raw.Copier le répertoire, les sous-répertoires et les fichiers sur la carte SD - android

Voici le code que j'utilise:

public class CopyActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    copyFilesToSdCard(); 
} 

static String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
final static String TARGET_BASE_PATH = extStorageDirectory+"/Android/data/"; 

private void copyFilesToSdCard() { 
    copyFileOrDir(""); 
} 

private void copyFileOrDir(String path) { 
    AssetManager assetManager = this.getAssets(); 
    String assets[] = null; 
    try { 
     Log.i("tag", "copyFileOrDir() "+path); 
     assets = assetManager.list(path); 
     if (assets.length == 0) { 
      copyFile(path); 
     } else { 
      String fullPath = TARGET_BASE_PATH + path; 
      Log.i("tag", "path="+fullPath); 
      File dir = new File(fullPath); 
      if (!dir.exists()) 
       if (!dir.mkdirs()); 
        Log.i("tag", "could not create dir "+fullPath); 
      for (int i = 0; i < assets.length; ++i) { 
       String p; 
       if (path.equals("")) 
        p = ""; 
       else 
        p = path + "/"; 

        copyFileOrDir(p + assets[i]); 
      } 
     } 
    } catch (IOException ex) { 
     Log.e("tag", "I/O Exception", ex); 
    } 
} 

private void copyFile(String filename) { 
    AssetManager assetManager = this.getAssets(); 

    InputStream in = null; 
    OutputStream out = null; 
    String newFileName = null; 
    try { 
     Log.i("tag", "copyFile() "+filename); 
     in = assetManager.open(filename); 
     if (filename.endsWith(".jpg")) // extension was added to avoid compression on APK file 
      newFileName = TARGET_BASE_PATH + filename.substring(0, filename.length()-4); 
     else 
      newFileName = TARGET_BASE_PATH + filename; 
     out = new FileOutputStream(newFileName); 

     byte[] buffer = new byte[1024]; 
     int read; 
     while ((read = in.read(buffer)) != -1) { 
      out.write(buffer, 0, read); 
     } 
     in.close(); 
     in = null; 
     out.flush(); 
     out.close(); 
     out = null; 
    } catch (Exception e) { 
     Log.e("tag", "Exception in copyFile() of "+newFileName); 
     Log.e("tag", "Exception in copyFile() "+e.toString()); 
    } 

} 
} 

exception:

Exception in copyFile() of /mnt/sdcard/Android/data/raw/edu/anees.txt 
Exception in copyFile() java.io.FileNotFoundException: 
/mnt/sdcard/Android/data/raw/edu/anees.txt: open failed: ENOENT (No such file or directory) 

Quelqu'un peut-il s'il vous plaît me faire savoir ce qui cause ce problème et de la solution pour la même .

ref: How to copy files from 'assets' folder to sdcard?

EDIT

je pouvais résoudre l'exception avec l'un des conseils sur l'autorisation qui a été publiée comme une réponse ici.

Maintenant, je rencontre une autre question qui est la suivante:

Le journal suivant dit que je ne peux pas créer un dossier dans le chemin suivant:

Log.i("tag", "could not create dir "+fullPath);// fullPath = /mnt/sdcard/Android/data/raw 

Je ne veux pas avoir les données stockées à l'intérieur/mnt/sdcard/Android/données/raw, mais à la place, je veux avoir le contenu du dossier brut à l'intérieur des actifs à copier dans le chemin/mnt/sdcard/Android/data qui ne se passe pas avec le morceau de code que j'utilise du lien de référence que j'ai donné. Des raisons évidentes qui pourraient causer cela avec le code que j'ai donné?

Répondre

6

Vous pourriez avoir oublié de définir l'autorisation dans votre manifeste

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

Il pourrait me aider à résoudre l'exception, merci. Mais je rencontre un autre problème que je mentionne dans mon post comme un edit dans ma question – user1400538

+1

Et qu'est-ce que c'est? –

+0

Je viens de publier en tant que modification maintenant – user1400538

Questions connexes