4

Я использую следующий код для копирования определенного каталога и его содержимого на SD-карту. Каталог находится внутри папки res/raw.Копировать каталог, подкаталоги и файлы на SD-карту - android

Ниже код я использую:

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 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) 

Может кто-то пожалуйста, дайте мне знать, что вызывает эту проблему и решение для того же ,

исх: How to copy files from 'assets' folder to sdcard?

EDIT

Я мог бы разрешить исключение с одним из советов относительно разрешения, который был отправлен в один ответ здесь.

Теперь я встречаю еще один вопрос, который выглядит следующим образом:

Следующий журнал говорит, что я не могу создать папку по следующему пути:

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

Я не хочу, чтобы данные, хранящиеся внутри/mnt/sdcard/Android/data/raw, но вместо этого я хочу, чтобы содержимое исходной папки внутри активов копировалось на путь/mnt/sdcard/Android/data, который не происходит с частью кода, которую я использую из ссылки, которую я дал. Любые очевидные причины, которые могут вызвать это с кодом, который я дал?

ответ

6

Возможно, вы забыли установить разрешение в манифесте

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

Это могло бы помочь мне разрешить исключение, спасибо. Но я столкнулся с другой проблемой, о которой я упоминаю в своем посте, как о редактировании в моем вопросе – user1400538

+1

И что это? –

+0

Я опубликовал как править только сейчас – user1400538

Смежные вопросы