2010-10-03 20 views
8

Sto provando a creare una cartella e diverse sottodirectory all'interno della scheda SD ... Poi voglio trasferire i file che ho memorizzato in/res/raw in quella cartella ... Inoltre, voglio solo questo capita una volta, la prima volta che il programma viene eseguito. Mi rendo conto che questo è ridicolmente aperto e che sto chiedendo molto ... ma qualsiasi aiuto sarebbe molto apprezzato.Android: come creare una directory sulla scheda SD e copiare i file da/res/raw ad esso?

risposta

9

Ciò copierà tutti i file nella sottocartella "clipart" della cartella di asset .apk nella sottocartella "clipart" della cartella di vostra applicazione sulla scheda 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

da dove viene questo codice bisogno di essere per assicurarsi che accade solo una volta, al momento dell'installazione, e quindi rimuovere i file dal APK? – joon

+0

@joon: puoi usare [link] (http://developer.android.com/reference/android/content/SharedPreferences.html) per salvare un valore booleano per assicurarti che accada solo una volta. A proposito, non puoi cancellare i file da apk. @ Vedi altro: [link] (http://developer.android.com/guide/topics/resources/providing-resources.html) – Justin

0

ho sperimentato un problema simile quando si utilizza mkdirs(), tuttavia, perché l'esecuzione del comando:

mkdir uno/due

non riesce su Linux, quindi il metodo di suc http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs() fallisce anche troppo. Immagino che questo significhi che non c'è modo di usare mkdirs su Android? La mia (probabilmente piuttosto hacky) work-around è stato quello di creare ogni directory necessaria a parte:

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) funziona. L'ho provato su Android 2.1 (API Livello 7) – Mudassir

Problemi correlati