2010-10-03 7 views
8

J'essaie de créer un dossier et plusieurs sous-répertoire à l'intérieur de celui-ci sur la carte SD ... Je veux ensuite transférer les fichiers que j'ai stockés dans/res/raw dans ce dossier ... Je plus, je veux seulement se produire une fois, la première fois que le programme est exécuté. Je me rends compte que c'est ridiculement ouvert, et que je demande beaucoup ... mais toute aide serait grandement appréciée.Android: Comment créer un répertoire sur la carte SD et y copier des fichiers depuis/res/raw?

Répondre

9

Cela copiera tous les fichiers dans le sous-dossier « clipart » des actifs .apk dossier dans le sous-dossier du dossier de votre application « clipart » sur la carte SD:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
    String basepath = extStorageDirectory + "/name of your app folder on the SD card"; 
//... 

// in onCreate 
File clipartdir = new File(basepath + "/clipart/"); 
     if (!clipartdir.exists()) { 
      clipartdir.mkdirs(); 
      copyClipart();  
     } 

private void copyClipart() { 
     AssetManager assetManager = getResources().getAssets(); 
     String[] files = null; 
     try { 
      files = assetManager.list("clipart"); 
     } catch (Exception e) { 
      Log.e("read clipart ERROR", e.toString()); 
      e.printStackTrace(); 
     } 
     for(int i=0; i<files.length; i++) { 
      InputStream in = null; 
      OutputStream out = null; 
      try { 
       in = assetManager.open("clipart/" + files[i]); 
       out = new FileOutputStream(basepath + "/clipart/" + files[i]); 
       copyFile(in, out); 
       in.close(); 
       in = null; 
       out.flush(); 
       out.close(); 
       out = null; 
      } catch(Exception e) { 
       Log.e("copy clipart ERROR", e.toString()); 
       e.printStackTrace(); 
      }  
     } 
    } 
    private void copyFile(InputStream in, OutputStream out) throws IOException { 
     byte[] buffer = new byte[1024]; 
     int read; 
     while((read = in.read(buffer)) != -1){ 
      out.write(buffer, 0, read); 
     } 
    } 
+0

où est-ce code doivent être pour vous assurer qu'il se produit qu'une seule fois, lors de l'installation, puis supprimer les fichiers de l'APK? – joon

+0

@joon: Vous pouvez utiliser [link] (http://developer.android.com/reference/android/content/SharedPreferences.html) pour enregistrer une valeur booléenne afin de vous assurer que cela ne se produit qu'une seule fois. En passant, vous ne pouvez pas supprimer les fichiers d'apk. @ Voir plus: [link] (http://developer.android.com/guide/topics/resources/providing-resources.html) – Justin

0

J'ai connu un problème similaire lors de l'utilisation (mkdirs), cependant à cause d'exécuter la commande:

mkdir une/deux

échoue sur Linux, la méthode http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs() subsé échoue aussi Je suppose que cela signifie qu'il n'y a aucun moyen d'utiliser mkdirs sur Android? Mon (probablement plutôt hacky) le travail autour était de créer chaque répertoire nécessaire séparément:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
new File(extStorageDirectory + "/one/").mkdirs(); 
new File(extStorageDirectory + "/one/two/).mkdirs(); 
+0

[File.mkDirs() ] (http://developer.android.com/reference/java/io/File.html#mkdirs%28%29) fonctionne. Je l'ai essayé sur Android 2.1 (API niveau 7) – Mudassir

Questions connexes