2012-06-18 13 views
6

Ich habe einen Ordner, der einige Dateien und einige Verzeichnisse enthält, die ich auf meiner SD-Karte/mnt/sdcard/Android/Daten/Pfad kopieren muss, während ich starte die Anwendung zum ersten Mal, und natürlich, wenn nicht schon der erforderliche Ordner ist nicht in diesem Pfad vorhanden.Kopieren von Verzeichnissen und Dateien von Res/Raw-Ordner auf SD-Karte - Android

Ich werde diesen Ordner in Res/Raw-Ordner meiner Anwendung haben.

Was sind die schrittweisen Verfahren, die ich tun muss, so dass ich den Ordner und seinen gesamten Inhalt von res/raw zum angegebenen Pfad auf der SD-Karte kopieren kann.

Jede Hilfe wird sehr geschätzt.

bearbeiten

Das Folgende ist die Lösung, wenn es jemand hilft anderes:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    copyFileOrDir("edu1");//directory name in assets 
} 
File sdCard = Environment.getExternalStorageDirectory(); 
private void copyFileOrDir(String path) { 
    AssetManager assetManager = this.getAssets(); 
    String assets[] = null; 
    try { 
     assets = assetManager.list(path); 
     if (assets.length == 0) { 
      copyFile(path); 
     } else { 
      File dir = new File (sdCard.getAbsolutePath() + "/" + "Android/data"); 
      //String fullPath = "/data/data/" + this.getPackageName() + "/" + path;//path for storing internally to data/data 
      //File dir = new File(fullPath); 
      if (!dir.exists()){ 
       System.out.println("Created directory"+sdCard.getAbsolutePath() + "/Android/data"); 
       boolean result = dir.mkdir(); 
       System.out.println("Result of directory creation"+result); 
      } 

      for (int i = 0; i < assets.length; ++i) { 
       copyFileOrDir(path + "/" + assets[i]); 
      } 
     } 
    } catch (IOException ex) { 
     System.out.println("Exception in copyFileOrDir"+ex); 
    } 
} 

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

    InputStream in = null; 
    OutputStream out = null; 
    try { 
     in = assetManager.open(filename); 
     //String newFileName = "/data/data/" + this.getPackageName() + "/" + filename;//path for storing internally to data/data 
     String newFileName = sdCard.getAbsolutePath() + "/Android/data/" + 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) { 
     System.out.println("Exception in copyFile"+e); 
    } 

} 
} 
+0

Sie können etwas Code auf, was Sie bis jetzt getan haben? Es sieht so aus, als ob du nur sagst "Hier ist, was ich machen möchte, kodiere es jetzt für mich." –

+0

nicht wirklich, ich bearbeite meine Frage. – user1400538

Antwort

2

Ich schlage vor, Sie das Vermögen von Dateien zu halten. Der folgende Code kann Ihnen beim Kopieren von Inhalten aus dem Anlagenverzeichnis auf die SD-Karte helfen.

public static void copyFile(Activity c, String filename) 
{ 
    AssetManager assetManager = c.getAssets(); 

    InputStream in = null; 
    OutputStream out = null; 
    try 
    { 
     in = assetManager.open(filename); 
     String newFileName = sdcardpath/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) { 
     Utility.printLog("tag", e.getMessage()); 
    }finally{ 
     if(in!=null){ 
      try { 
       in.close(); 
      } catch (IOException e) { 
       printLog(TAG, "Exception while closing input stream",e); 
      } 
     } 
     if(out!=null){ 
      try { 
       out.close(); 
      } catch (IOException e) { 
       printLog(TAG, "Exception while closing output stream",e); 
      } 
     } 
    } 
} 
+0

Wie ich in meinem QStion deutlich erwähnt habe, sind es nicht nur Dateien, die ich kopieren muss, sondern auch Ordner und Unterordner. – user1400538

+0

Dieser Link hilft Ihnen beim Kopieren von Ressourcen aus der Roh-Ressource http://StackOverflow.com/Questions/939170/ resources-openrawresource-issue-android – vineet

+0

Wenn Sie auch Unterordner von Assets kopieren müssen, müssen Sie die Kopie etwas ändern. – vineet