2010-10-03 12 views
8

मैं एसडी कार्ड पर इसके अंदर एक फ़ोल्डर और कई उपनिर्देशिका बनाने की कोशिश कर रहा हूं ... फिर मैं उन फ़ाइलों को स्थानांतरित करना चाहता हूं जिन्हें मैंने उस फ़ोल्डर में/res/raw में संग्रहीत किया है ... मैं इसके अलावा, मैं केवल यह चाहता हूं एक बार होता है, पहली बार प्रोग्राम कभी चलाया जाता है। मुझे एहसास है कि यह हास्यास्पद रूप से खुला है, और मैं बहुत कुछ पूछ रहा हूं ... लेकिन किसी भी मदद की सराहना की जाएगी।एंड्रॉइड: एसडी कार्ड पर निर्देशिका कैसे बनाएं और फ़ाइलों को/res/raw से कॉपी करें?

उत्तर

9

यह "क्लिप आर्ट" एसडी कार्ड पर अपने ऐप के फ़ोल्डर का सबफ़ोल्डर के लिए .apk संपत्ति फ़ोल्डर की "क्लिपआर्ट" सबफ़ोल्डर में सभी फ़ाइलों की प्रतिलिपि जाएगा: का उपयोग करते समय

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

जहां इस कोड पर यकीन है कि यह केवल एक बार होता बनाने के लिए, स्थापित करें, और उसके बाद APK से फ़ाइलें निकालने के होने की जरूरत है: मेरा (शायद नहीं बल्कि hacky) काम के आसपास प्रत्येक आवश्यक निर्देशिका बनाने के लिए था? – joon

+0

@ जून: यह सुनिश्चित करने के लिए कि यह केवल एक बार होता है, आप एक बूलियन मान को बचाने के लिए [link] (http://developer.android.com/reference/android/content/SharedPreferences.html) का उपयोग कर सकते हैं। वैसे, आप apk से फ़ाइलों को हटा नहीं सकते हैं। @ और देखें: [लिंक] (http://developer.android.com/guide/topics/resources/providing-resources.html) – Justin

0

मैं एक ऐसी ही समस्या का सामना करना mkdirs(), आदेश चलाकर लेकिन क्योंकि:

mkdir एक/दो

लिनक्स पर विफल रहता है, तो विधि http://download.oracle.com/javase/1.4.2/docs/api/java/io/File.html#mkdirs() subse भी असफल हो जाता है। मुझे लगता है कि एंड्रॉइड पर mkdirs का उपयोग करने का कोई तरीका नहीं है?

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) काम करता है। मैंने एंड्रॉइड 2.1 (एपीआई लेवल 7) पर कोशिश की है – Mudassir

संबंधित मुद्दे